使用头部为application/x-www-form-urlencoded的curl进行POST请求

52
$post_data="dispnumber=567567567&extension=6";
$url="http://xxxxxxxx.xxx/xx/xx";

我需要使用cURL php发布此$post_data,并使用头部application/x-www-form-urlencoded。我对cURL还不熟悉,希望有人能够帮助。

3个回答

133
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://xxxxxxxx.xxx/xx/xx");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
            "dispnumber=567567567&extension=6");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));


// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

// further processing ....
if ($server_output == "OK") { ... } else { ... }

?>

我需要使用这个头部 application/x-www-form-urlencoded 进行发布。 - Saravanan M P
请添加以下代码:curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); - Shakti Patel
6
我强烈赞同应该使用 http_build_query 函数,将数组转换为 application/x-www-form-urlencoded 格式,并用于构建 CURLOPT_POSTFIELDS 参数的值。 - Paul T. Rawkeen
需要使用application/x-www-form-urlencoded格式的http_build_query,否则您的数据将无法被找到。感谢@user3338098的评论解决了这个bug。例如:curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arr)); - Munaf Hajir
@user3338098 我觉得翻译时可能有些失误。无论你之前的评论说了什么,对我很有帮助。现在你已经删除了评论,我不知道是什么有用内容(研究人员也将不知道)。 - mickmackusa

10
 $curl = curl_init();
 curl_setopt_array($curl, array(
            CURLOPT_URL => "http://example.com",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "value1=111&value2=222",
            CURLOPT_HTTPHEADER => array(
                "cache-control: no-cache",
                "content-type: application/x-www-form-urlencoded"
            ),
        ));
 $response = curl_exec($curl);
 $err = curl_error($curl);

 curl_close($curl);

 if (!$err)
 {
      var_dump($response);
 }

4
尝试以下操作:
$post_data="dispnumber=567567567&extension=6";
$url="http://xxxxxxxx.xxx/xx/xx";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));   
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);

echo $result;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接