Il linguaggio di programmazione PHP
 

curl amazon.de da errore invece di http_status 200

Sandro kensan 21 Mar 2017 23:30
Alcune pagine web se aperte da browser danno un http status di 200
mentre se aperte da curl danno errore oppure un 5xx.

Per esempio https://www.amazon.de/dp/3864451434 non da 200 con il
seguente curl:

function httpstatus($link){
$handle = curl_init($link);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_NOBODY, TRUE);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($handle, CURLOPT_TIMEOUT, 10);
curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux
x86_64; rv:45.0) Gecko/20100101 Firefox/45.0");

$response = curl_exec($handle);
if ($response === false) {
$httpCode = "error";
}else{
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
}

curl_close($handle);
return($httpCode);
}

Qualche idea per migliorare il codice?

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Leonardo Serni 22 Mar 2017 00:17
On Tue, 21 Mar 2017 23:30:06 +0100, Sandro kensan <kensan@kensan.it> wrote:

>Alcune pagine web se aperte da browser danno un http status di 200
>mentre se aperte da curl danno errore oppure un 5xx.
>
> curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux
>x86_64; rv:45.0) Gecko/20100101 Firefox/45.0");

Prova con un browser più aggiornato.

"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
Firefox/52.0".

Leonardo <grin>
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
fmassei@gmail.com 22 Mar 2017 00:31
On Tuesday, March 21, 2017 at 6:30:10 PM UTC-4, Sandro kensan wrote:
> Alcune pagine web se aperte da browser danno un http status di 200
> mentre se aperte da curl danno errore oppure un 5xx.
>

Usa la API di amazon, per esempio attraverso la apai-io.
Sono fatte apposta.

Ciao!
Sandro kensan 22 Mar 2017 13:14
On 22/03/2017 00:17, Leonardo Serni wrote:
> On Tue, 21 Mar 2017 23:30:06 +0100, Sandro kensan <kensan@kensan.it> wrote:
>
>> Alcune pagine web se aperte da browser danno un http status di 200
>> mentre se aperte da curl danno errore oppure un 5xx.
>>
>> curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux
>> x86_64; rv:45.0) Gecko/20100101 Firefox/45.0");
>
> Prova con un browser più aggiornato.
>
> "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
Firefox/52.0".
>
> Leonardo <grin>

Il 45 è l'ultima versione ESR, quella del mio browser che è aggiornato.
La 52 è l'ultima versione del ramo consumer.

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Sandro kensan 22 Mar 2017 13:21
On 22/03/2017 00:31, fmassei@gmail.com wrote:
> On Tuesday, March 21, 2017 at 6:30:10 PM UTC-4, Sandro kensan wrote:
>> Alcune pagine web se aperte da browser danno un http status di 200
>> mentre se aperte da curl danno errore oppure un 5xx.
>>
>
> Usa la API di amazon, per esempio attraverso la apai-io.
> Sono fatte apposta.

Non volevo appoggiarmi a un servizio esterno per evitare di dovere
aggiornare il codice quando cambiano le API oppure di trovarmi off line
il sito. Poi occorre sottoscrivere TOS che cambiano nel tempo, è tutto
un lavoro.
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
fmassei@gmail.com 22 Mar 2017 15:33
On Wednesday, March 22, 2017 at 8:21:10 AM UTC-4, Sandro kensan wrote:
> On 22/03/2017 00:31, fmassei@gmail.com wrote:
>> Usa la API di amazon, per esempio attraverso la apai-io.
>> Sono fatte apposta.
>
> Non volevo appoggiarmi a un servizio esterno per evitare di dovere
> aggiornare il codice quando cambiano le API oppure di trovarmi off line
> il sito. Poi occorre sottoscrivere TOS che cambiano nel tempo, è tutto
> un lavoro.
>

Pensi che i formati delle pagine o gli URLs siano più longevi delle API?

Ciao!
Leonardo Serni 22 Mar 2017 22:53
On Wed, 22 Mar 2017 13:14:27 +0100, Sandro kensan <kensan@kensan.it> wrote:

>On 22/03/2017 00:17, Leonardo Serni wrote:
>> On Tue, 21 Mar 2017 23:30:06 +0100, Sandro kensan <kensan@kensan.it> wrote:

>>> Alcune pagine web se aperte da browser danno un http status di 200
>>> mentre se aperte da curl danno errore oppure un 5xx.

>>> curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux
>>> x86_64; rv:45.0) Gecko/20100101 Firefox/45.0");

>> Prova con un browser più aggiornato.

>> "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
Firefox/52.0".

>> Leonardo <grin>

>Il 45 è l'ultima versione ESR, quella del mio browser che è aggiornato.
>La 52 è l'ultima versione del ramo consumer.

...ma, provare, hai provato? :-)

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
Sandro kensan 23 Mar 2017 10:17
On 22/03/2017 22:53, Leonardo Serni wrote:
> On Wed, 22 Mar 2017 13:14:27 +0100, Sandro kensan <kensan@kensan.it> wrote:
>
>> On 22/03/2017 00:17, Leonardo Serni wrote:

>> Il 45 è l'ultima versione ESR, quella del mio browser che è aggiornato.
>> La 52 è l'ultima versione del ramo consumer.
>
> ...ma, provare, hai provato? :-)

Provo stasera ma non sono convinto.
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Sandro kensan 23 Mar 2017 10:18
On 22/03/2017 15:33, fmassei@gmail.com wrote:

> Pensi che i formati delle pagine o gli URLs siano più longevi delle API?

Cerco di appoggiarmi a servizi esterni il meno possibile.
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Sandro kensan 29 Mar 2017 15:22
On 22/03/2017 22:53, Leonardo Serni wrote:

> ...ma, provare, hai provato? :-)

Ho provato. Mi da sempre 405. Con entrambi gli user agent, sia quello
commentato che quello scommentato.

Codice di risposta: *405*

Se provo l'accesso tramite browser la pagina è regolarmente visualizzata.

Questo il codice:

<?php
$link = "https://www.amazon.de/dp/3864451434";

function httpstatus($link){
$handle = curl_init($link);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_NOBODY, TRUE);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($handle, CURLOPT_TIMEOUT, 10);
//curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux
x86_64; rv:45.0) Gecko/20100101 Firefox/45.0");
curl_setopt($handle, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0
(Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0");

$response = curl_exec($handle);
if ($response === false) {
$httpCode = "error";
}else{
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
}

curl_close($handle);
return($httpCode);
}
$code = httpstatus($link);
echo "Codice di risposta: *";
echo $code;
echo "*";
?>

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
fmigliori 29 Mar 2017 18:39
Usa ******* get_contents();
Sandro kensan 29 Mar 2017 20:17
On 29/03/2017 18:39, fmigliori wrote:
> Usa ******* get_contents();

non è che curl non funzioni ma su migliaia di link alcuni non funzionano.

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Sandro kensan 29 Mar 2017 21:59
On 29/03/2017 18:39, fmigliori wrote:
> Usa ******* get_contents();

Ho provato con il solo link di Amazon.de e mi da:


array(25) {
[0]=> string(29) "HTTP/1.1 301 MovedPermanently"
[1]=> string(14) "Server: Server"
[2]=> string(35) "Date: Wed, 29 Mar 2017 18:22:11 GMT"
[3]=> string(44) "Content-Type: text/html; charset=ISO-8859-15"
[4]=> string(26) "Transfer-Encoding: chunked"
[5]=> string(22) "Connection: keep-alive"
[6]=> string(71) "Strict-Transport-Security: max-age=47474747;
includeSubDomains; preload"
[7]=> string(16) "pragma: no-cache"
[8]=> string(32) "x-amz-id-1: 5CC5Z4CJWN20VQ163X15"
[9]=> string(183) "p3p:
policyref="https://www.amazon.de/w3c/p3p.xml",CP="CAO DSP LAW CUR ADM
IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV
INT DEM CNT STA HEA PRE LOC GOV OTC ""
[10]=> string(37) "cache-control: no-cache, no-transform"
[11]=> string(27) "x-frame-options: SAMEORIGIN"
[12]=> string(11) "expires: -1"
[13]=> string(80) "Location:
https://www.amazon.de/Gekaufte-Journalisten-Udo-Ulfkotte/dp/3864451434"
[14]=> string(32) "Vary: Accept-Encoding,User-Agent"
[15]=> string(32) "HTTP/1.1 503 Service Unavailable"
[16]=> string(14) "Server: Server"
[17]=> string(35) "Date: Wed, 29 Mar 2017 18:22:11 GMT"
[18]=> string(23) "Content-Type: text/html"
[19]=> string(20) "Content-Length: 2178"
[20]=> string(22) "Connection: keep-alive"
[21]=> string(50) "Vary: Content-Type,Host,Accept-Encoding,User-Agent"
[22]=> string(44) "Last-Modified: Tue, 01 Dec 2015 19:40:15 GMT"
[23]=> string(25) "ETag: "882-525db53a5e5c0""
[24]=> string(20) "Accept-Ranges: bytes" }

Seguendo il link mi da:
(301->https://www.amazon.de/Gekaufte-Journalisten-Udo-Ulfkotte/dp/3864451434)

array(10) {
[0]=> string(32) "HTTP/1.1 503 Service Unavailable"
[1]=> string(14) "Server: Server"
[2]=> string(35) "Date: Wed, 29 Mar 2017 18:27:24 GMT"
[3]=> string(23) "Content-Type: text/html"
[4]=> string(20) "Content-Length: 2178"
[5]=> string(22) "Connection: keep-alive"
[6]=> string(50) "Vary: Content-Type,Host,Accept-Encoding,User-Agent"
[7]=> string(44) "Last-Modified: Tue, 01 Dec 2015 19:40:15 GMT"
[8]=> string(25) "ETag: "882-525db53a5e5c0""
[9]=> string(20) "Accept-Ranges: bytes" }

Quindi da un 503.
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
fmigliori 29 Mar 2017 22:18
Il giorno mercoledì 29 marzo 2017 21:59:17 UTC+2, Sandro kensan ha scritto:
> On 29/03/2017 18:39, fmigliori wrote:
>> Usa ******* get_contents();
>
> Ho provato con il solo link di Amazon.de e mi da:

A me scarica la pagina.
Uso php 7.0.10.
Leonardo Serni 29 Mar 2017 23:02
On Wed, 29 Mar 2017 15:22:17 +0200, Sandro kensan <kensan@kensan.it> wrote:

>On 22/03/2017 22:53, Leonardo Serni wrote:

>> ...ma, provare, hai provato? :-)

>Ho provato. Mi da sempre 405. Con entrambi gli user agent, sia quello
>commentato che quello scommentato.

Strano. Perché avevo provato anche io, e con uno mi rimbalzava, ma mettendo lo
stesso user-agent di un Firefox che avevo a tiro, è andata bene.

Specificamente, provato ora:

curl "https://www.amazon.de/dp/3864451434" -H "Host: www.amazon.de" -H
"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"

fallisce.

curl "https://www.amazon.de/dp/3864451434" -H "Host: www.amazon.de" -H
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
Firefox/52.0"

mi restituisce un putiferio di HTML.

Ne deduco che il mio test fosse sulla strada giusta - ma incompleto: quel sito
riconosce alcune feature della connessione, e se non gli piacciono n'arimbarza
senza esitazione.

Per esempio non gli piace HEAD.

In effetti, se metto

curl_setopt($handle, CURLOPT_NOBODY, false);

il tuo codice mi ritorna 200.

Però, avere a che fare con un sito (o syto) così schizzinoso, non so se ti fa.

Voglio dire, che garanzie hai che domani non cambieranno qualche altra cosa?

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
fmassei@gmail.com 29 Mar 2017 23:13
On Wednesday, March 29, 2017 at 3:59:17 PM UTC-4, Sandro kensan wrote:
> On 29/03/2017 18:39, fmigliori wrote:
>> Usa ******* get_contents();
>
> Ho provato con il solo link di Amazon.de e mi da:
>

Ci riprovo...
Ribadisco che se usavi la libreria che Amazon stessa mette a disposizione già
avevi finito...

Ciao!
Sandro kensan 30 Mar 2017 15:04
On 29/03/2017 23:02, Leonardo Serni wrote:

> Ne deduco che il mio test fosse sulla strada giusta - ma incompleto: quel sito
> riconosce alcune feature della connessione, e se non gli piacciono n'arimbarza
> senza esitazione.
>
> Per esempio non gli piace HEAD.
>
> In effetti, se metto
>
> curl_setopt($handle, CURLOPT_NOBODY, false);
>
> il tuo codice mi ritorna 200.
>
> Però, avere a che fare con un sito (o syto) così schizzinoso, non so se ti
fa.
>
> Voglio dire, che garanzie hai che domani non cambieranno qualche altra cosa?

Sono arrivato pure io alla tua stessa conclusione, ieri sera ho fatto
diverse prove. Con wget da CLI funziona mentre il mio codice non
funzionava per cui ho provato a commentare le setopt più sospette e ho
visto che togliendo il nobody mi dava uno status di 200. Quindi sono
arrivato alla tua stessa conclusione.

Adesso però non so più cosa fare. Le opzioni sono diverse, per esempio
se il problema è solo dei link ad amazon potrei ignorare il problema e
pensarlo come limitato.

Oppure potrei scaricare il body di tutti i link/siti solo per vedere lo
status con aggravio della pesantezza.

Oppure potrei mettere a false CURLOPT_NOBODY solo se l'URL è di amazon.

Consigli?

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Leonardo Serni 30 Mar 2017 20:10
On Thu, 30 Mar 2017 15:04:17 +0200, Sandro kensan <kensan@kensan.it> wrote:

>Oppure potrei scaricare il body di tutti i link/siti solo per vedere lo
>status con aggravio della pesantezza.

>Oppure potrei mettere a false CURLOPT_NOBODY solo se l'URL è di amazon.

>Consigli?

Se proprio, metti un controllo sul codice di ritorno; di norma vai di HEAD, se
fallisce [opzionalmente: ed è di Amazon], riprovi con GET, se poi non ce la fa
neanche così lo dai per stecchito.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
Sandro kensan 30 Mar 2017 23:54
On 30/03/2017 20:10, Leonardo Serni wrote:

> Se proprio, metti un controllo sul codice di ritorno; di norma vai di HEAD, se
> fallisce [opzionalmente: ed è di Amazon], riprovi con GET, se poi non ce la
fa
> neanche così lo dai per stecchito.

È lo stesso di quello che ho pensato:

$tmp = parse_url($link);
if (strpos($tmp["host"], "amazon") !== false){
curl_setopt($handle, CURLOPT_NOBODY, FALSE);
echo "AMAZON<br>";
}else{
curl_setopt($handle, CURLOPT_NOBODY, TRUE);
}

Grazie :)

--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione PHP | Tutti i gruppi | it.comp.www.php | Notizie e discussioni php | Php Mobile | Servizio di consultazione news.