2012-04-26 232 views
0

我正在使用以下代碼在當前捲曲URL,這可以很好地與連接到URL結尾或POST數據的get一起使用。但不是和get和post。PHP Curl GET&POST

但是,當我使用高級休息客戶端(添加谷歌瀏覽器)它工作得很好。儘管如此,我看不到它發送的模仿它的請求。

繼承人我打電話給它。

$fields = array(
     'searchPaginationResultsPerPage'=>500    ); 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
$fields_string = rtrim($fields_string,'&'); 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://www.microgenerationcertification.org/mcs-consumer/installer-search.php?searchPaginationPage=1'); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl,CURLOPT_POST,count($fields)); 
curl_setopt($curl,CURLOPT_POSTFIELDS,$fields_string); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 80); 
$str = curl_exec($curl); 
curl_close($curl); 

只是使用這個作爲一個測試比其他任何東西,但似乎無法得到它的工作。我能拿到第500個結果所有的時間,但不能下500

回答

0

這工作

$fields = array (
     'searchPaginationResultsPerPage' => 500, 
     'searchPaginationPage' => 1 
); 

$headers = array (
     "Connection: keep-alive", 
     "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19", 
     "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
     "Accept-Encoding: gzip,deflate,sdch", 
     "Accept-Language: en-US,en;q=0.8", 
     "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3" 
); 

$fields_string = http_build_query ($fields); 
$cookie = 'cf6c650fc5361e46b4e6b7d5918692cd=49d369a493e3088837720400c8dba3fa; __utma=148531883.862638000.1335434431.1335434431.1335434431.1; __utmc=148531883; __utmz=148531883.1335434431.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); mcs=698afe33a415257006ed24d33c7d467d; style=default'; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, 'http://www.microgenerationcertification.org/mcs-consumer/installer-search.php?searchPaginationPage=1&searchPaginationResultsPerPage=500'); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 80); 
curl_setopt ($ch, CURLOPT_COOKIE, $cookie); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 

$str = curl_exec ($ch); 
curl_close ($ch); 

echo $str; 

您需要的cookie信息,並確保捲曲使用GET無法發佈

見演示:http://codepad.viper-7.com/gTThxX(我希望cokkies不befor過期Ë您觀看)

+0

在提示明顯之前,您是否嘗試過這種方法? – David 2012-04-26 10:11:58

+0

我想可能不會,因爲你會發現你的代碼給出了我在這個主題的正文中提出的同樣的問題。 – David 2012-04-26 10:13:26

+1

'我可以一直得到前500的結果,但不是下一個500'測試它....有什麼你認爲錯過了? – Baba 2012-04-26 10:22:07

0

不知道爲什麼失敗了,看起來不錯。當你跳過捲曲,去爲PHP流的方法會發生什麼:

$postdata = http_build_query(
    array(
     'searchPaginationResultsPerPage' => 500 
    ) 
); 
$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('http://www.microgenerationcertification.org/mcs-consumer/installer-search.php?searchPaginationPage=1', false, $context); 
+0

$ POSTDATA = http_build_query( 陣列( 'searchPaginationResultsPerPage'=> '500' ) ); $ opts = array('http'=> array( 'method'=>'POST', 'header'=>'Content-type:application/x-www-form-urlencoded', 'content' => $ postdata ) ); $ context = stream_context_create($ opts); $ result = file_get_contents('http://www.microgenerationcertification.org/mcs-consumer/installer-search.php?searchPaginationPage=1',false,$ context); $ html = new simple_html_dom(); $ html-> load($ result); echo $ html; – David 2012-04-26 10:09:10

+0

嘗試此並獲得相同的結果。 – David 2012-04-26 10:09:27

0

我看看你刮的頁面,發現如下:

  • 當您更改每頁結果它張貼您的搜索再次
  • 他們似乎是使用會話來存儲您的搜索參數

使用CURL時,您不保留會話ID(並且這樣做可能比您想要的複雜一些),因此這不會與網站上的行爲相同。

但我注意到,但是如果您將searchPaginationResultsPerPage參數追加到URL,它的工作正常。就像這樣:

http://www.microgenerationcertification.org/mcs-consumer/installer-search.php?searchPaginationPage=0&searchPaginationResultsPerPage=500

這意味着你可以實際使用的file_get_contents,而不是擔心捲曲的東西。

+0

我試着用你建議的方法獲得第二個500頁,它不工作,只有第一個500. – David 2012-04-26 10:15:50

+0

然後你需要保留會話ID。他們的代碼中可能發生的情況是,如果您沒有在會話中存儲搜索關鍵字,則默認情況下會獲得第一個頁面。如果您不保留CURL請求之間的會話ID,則每次都像新會話一樣。在這裏閱讀CURL和cookies:http://coderscult.com/php/php-curl/2008/05/20/php-curl-cookies-example/ – RolandLovelock 2012-04-26 10:27:19

+0

我確實擔心這可能是問題所在。奇怪的是,它在兩個REST客戶端都能正常工作。 – David 2012-04-26 10:38:00