php curl发送帖子数据问题

问题描述:

我试图通过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,你仍然有数据返回。这是不可能的 –

首先我应该提到您不必构建发布数据的查询字符串。你可以传递数组。

请尝试设置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',它都不起作用。 –