簡體   English   中英

PHP cURL - 如何發送請求正文?

[英]PHP cURL - How do I send the body of the request?

我在嘗試使用 PHP 向 API 發布請求時遇到問題。 我無法控制 API 服務器,必須以他們請求的格式發送數據。 他們唯一真正的文檔是 CLI 的以下示例:

curl -X POST 'http://username:password@domain.tld/foo/bar?param1=false&param2=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選項和 append 參數將正文數據發布到 url 而不是設置為發布字段。

因此,您的代碼將是:

$ch = curl_init();
$username = "username";
$password = "password";
$data = "Hello World!";

$url = "http://" . $username . ":" . $password . "@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_TIMEOUT, 20);
$response = curl_exec($ch);
curl_close($ch);

使用CURLOPT_POSTFIELDS像:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://username:password@domain.tld/foo/bar?param1=false&param2=0');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello World!");
curl_setopt($ch, CURLOPT_POST, 1);

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

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

關於 POST 字段,您需要 CURLOPT_POSTFIELDS 選項。

例子:

CURLOPT_POSTFIELDS => array('var1' => 1,'var2' => 2)

關於用戶名和密碼,我建議您使用 CURLOPT_USERPWD。

例子:

CURLOPT_USERPWD => "$username:$password"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM