Скручиваемость URL в PHP? - PullRequest
       6

Скручиваемость URL в PHP?

0 голосов
/ 24 марта 2011

Я пытаюсь сделать скручивание из PHP

У меня есть:

$url="http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=".$arriPadSKU[$counter]."&zipcode=".$vZip."&city=&state=";

$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, '$url');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);

$buffer = curl_exec($curl_handle);

curl_close($curl_handle);

$ url создает такой URL и работает в браузере:

http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=057-10-1830&zipcode=95128&city=&state=

Однако я не получаю результатов от моего вызова Curl, я не думаю, что какие-либо результаты возвращаются. Если я смотрю результаты в $ buffer, я не вижу данных, как на странице.

Не могу ли я установить такой URL-адрес как CURLOPT_URL?

Как бы я структурировал это? Из командной строки это работает:

echo "iPad 2 Wi-Fi White 16GB: "; curl -s --data "_dyncharset=ISO-8859-1&asin=&dpci=057-10-1839&zipcode=95128&city=&state=" <a href="http://sites.target.com/site/en/spot/mobile" rel="nofollow">http://sites.target.com/site/en/spot/mobile</a>_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Проблема в том, что вы заключили $ url в строковый литерал.

Если вы запустите curl_getinfo ($ curl_handle); вы увидите URL, который он запрашивает, - http://$url, что явно недопустимо.

Array
(
[url] => http://$url
[content_type] => 
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
    (
    )
)

EDIT

Вот обновленный код, который я использую для тестирования:

<?php

$url="http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=057-10-1830&zipcode=95128&city=&state=";

$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, $url);
//curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);

$buffer = curl_exec($curl_handle);

//curl_close($curl_handle);

print $buffer."\n";

print_r(curl_getinfo($curl_handle));
?>

Это работает для меня. Тем не менее, единственная другая проблема, которая, как я вижу, может помешать вам получить данные обратно, - это ваше безумно низкое время ожидания соединения. Попробуйте установить его выше.

Опять же, приведенный выше код работает.

ВНОВЬ ОБНОВЛЕНО

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что целевой сайт проверяет правильность пользовательского агента.

Что-то вроде:

curl_setopt($curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.04 (lucid) Firefox/3.6.15");

работает просто отлично.

1 голос
/ 24 марта 2011

Попробуйте

curl_setopt($curl_handle,CURLOPT_URL, $url);

вместо

curl_setopt($curl_handle,CURLOPT_URL, '$url');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...