2016-07-27 125 views
0

我試圖通過curl庫來獲取頁面的數據。我可以用簡單的鏈接來完成,但是當我要提交表單然後獲取數據時,我不能。它返回頁面的默認值,而不是提交的表單。讓我解釋一下代碼。php curl發送帖子數據問題

$url = ... 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
// I'm sending post data 
$params = array(
     'madrak'=>5, 
     'B1' => 'مشاهده اطلاعات' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
// and execute... 

我得到的數據頁寫有asp和頁面的組成部分是:

<input type="submit" value="مشاهده اطلاعات" name="B1"> 

<select name="madrak" size="1" class="style1" id="1"> 
    <option value="1">زير ديپلم</option> 
    <option value="5">ديپلم</option> 
    <option value="6">فوق ديپلم</option> 
    <option value="7">ليسانس</option> 
    <option value="8">فوق ليسانس</option> 
    <option value="9">دكترا</option> 
    <option selected="" value="6">فوق ديپلم</option> 
</select> 

看來,形式不被提交。因爲只是我可以獲取沒有提交表單的加載數據。任何想法?

+0

$ info = curl_getinfo($ ch);嘗試print_r($ info);獲取結果回電。檢查HTTP_Code返回值是200還是...? –

+0

@QuỳnhNguyễn它爲'http_code'返回我零。但它會返回數據。 –

+0

我不能相信http_code是0,你仍然有數據返回。這是不可能的 –

回答

1

首先我應該提到您不必構建發佈數據的查詢字符串。你可以傳遞數組。

請嘗試設置HTTP標頭。像內容類型,用戶代理等,目標網站可能會檢查標題。

但最重要的部分是設置Content-Type: application/x-www-form-urlencoded HTTP標頭。

curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); 
+0

不,它沒有工作。我搜索了'http_build_query',我發現我應該使用這個,但沒有這個功能,它不起作用。 –

+0

@vahidnajafi您正在以正確的方式發送數據。您是否嘗試設置其他HTTP標頭?測試它的最好方法是複製瀏覽器發送的所有標題,然後如果它仍然沒有給出正確的結果,則應考慮啓用cookie以進行卷曲。許多網站使用這些措施來防止數據抓取。 –

+0

無論是否使用'http_build_query',它都不起作用。 –