Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP cURL-如何发送请求体?_Php_Curl - Fatal编程技术网

PHP cURL-如何发送请求体?

PHP cURL-如何发送请求体?,php,curl,Php,Curl,我在尝试使用PHP向API发布请求时遇到问题。我无法控制API服务器,必须以他们请求的格式发送数据。他们唯一真实的文档是以下CLI示例: curl-X POST'http://username:password@domain.tld/foo/bar?param1=false¶m2=0'-d'Hello World!' 为了将其应用到PHP中,我想我已经用下面的代码复制了其中的大部分: $ch = curl_init(); $username="username"; $password="

我在尝试使用PHP向API发布请求时遇到问题。我无法控制API服务器,必须以他们请求的格式发送数据。他们唯一真实的文档是以下CLI示例:

curl-X POST'http://username:password@domain.tld/foo/bar?param1=false¶m2=0'-d'Hello World!'

为了将其应用到PHP中,我想我已经用下面的代码复制了其中的大部分:

$ch = curl_init();
$username="username";
$password="password";
$data="Hello World!";
$url = "http://" . $username . ":" . $password . "@domain.tld";
$postvars = array( "param1"=>"false", "param2"=>0 );
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
curl_close ($ch);
但我无法计算出数据部分去了哪里?如何在-d之后将请求主体发送到零件


在PHP cURL文档中,我看不到任何指示请求正文应如何形成的内容。

您需要使用CURLOPT_POSTFIELDS选项发布正文数据,并将参数附加到url,而不是设置为post字段

因此,您的代码将是:

$ch=curl\u init; $username=用户名; $password=密码; $data=你好,世界!; $url=http://$用户名::$密码@domain.tld; $params=array param1=>false,param2=>0; $url.=。http_build_query$params; curl_setopt$ch,CURLOPT_URL,$URL; curl_setopt$ch,CURLOPT_POST,1; curl_setopt$ch,CURLOPT_POSTFIELDS$data; curl_setopt$ch,CURLOPT_RETURNTRANSFER,true; curl_setopt$ch,CURLOPT_CONNECTTIMEOUT,3; curl_setopt$ch,CURLOPT_超时,20; $response=curl\u exec$ch; curl_close$ch;
您需要使用CURLOPT_POSTFIELDS选项发布正文数据,并将参数附加到url,而不是设置为post字段

因此,您的代码将是:

$ch=curl\u init; $username=用户名; $password=密码; $data=你好,世界!; $url=http://$用户名::$密码@domain.tld; $params=array param1=>false,param2=>0; $url.=。http_build_query$params; curl_setopt$ch,CURLOPT_URL,$URL; curl_setopt$ch,CURLOPT_POST,1; curl_setopt$ch,CURLOPT_POSTFIELDS$data; curl_setopt$ch,CURLOPT_RETURNTRANSFER,true; curl_setopt$ch,CURLOPT_CONNECTTIMEOUT,3; curl_setopt$ch,CURLOPT_超时,20; $response=curl\u exec$ch; curl_close$ch; 使用如下字段:

使用如下字段:


关于POST字段,您需要CURLOPT_POSTFIELDS选项

例如:

CURLOPT_POSTFIELDS => array('var1' => 1,'var2' => 2)
CURLOPT_USERPWD => "$username:$password"
关于用户名和密码,我建议您使用CURLOPT_USERPWD

例如:

CURLOPT_POSTFIELDS => array('var1' => 1,'var2' => 2)
CURLOPT_USERPWD => "$username:$password"

关于POST字段,您需要CURLOPT_POSTFIELDS选项

例如:

CURLOPT_POSTFIELDS => array('var1' => 1,'var2' => 2)
CURLOPT_USERPWD => "$username:$password"
关于用户名和密码,我建议您使用CURLOPT_USERPWD

例如:

CURLOPT_POSTFIELDS => array('var1' => 1,'var2' => 2)
CURLOPT_USERPWD => "$username:$password"

我能定两次吗?一次是参数,一次是身体?@yknivag我修改了答案。您需要将参数附加到url而不是帖子正文。我可以设置两次吗?一次是参数,一次是身体?@yknivag我修改了答案。您需要将参数附加到url而不是post正文。