最近我开始使用hotelbeds apitude PHP API
我正在尝试使用xml
将POST
代码添加到pecl_http
请求正文中。我尝试使用以下代码 -
$xml_part = <<< EOD
<<<XML PART>>> EOD;
$request = new http\Client\Request("POST",
$endpoint,
["Api-Key" => $hotel_beds_config['api_key'],
"X-Signature" => $signature,
"Content-Type" => "application/xml",
"Accept" => "application/xml"],
$xml_part
);
我收到以下错误
致命错误:未捕获TypeError:传递给http \ Client \ Request :: __ construct()的参数4必须是http \ Message \ Body的字符串实例,字符串 给定
然后我尝试使用以下代码 -
$request = new http\Client\Request("POST",
$endpoint,
["Api-Key" => $hotel_beds_config['api_key'],
"X-Signature" => $signature,
"Content-Type" => "application/xml",
"Accept" => "application/xml"],
new http\Message\Body($xml_part)
现在我收到以下错误 -
致命错误:未捕获http \ Exception \ InvalidArgumentException:http \ Message \ Body :: __ construct()期望参数1为资源,字符串为
我在这里获得了添加正文消息的文档 -
如何将xml代码添加到POST
请求?
答案 0 :(得分:0)
根据http\Message\Body::__construct()
constructor documentation,它可选择接受的单个参数是流或文件句柄资源(如fopen()
中所示)。它不会像您在$xml_part
中提供的那样直接接受字符串数据。
相反,pecl http在Body
类上提供了an append()
method,您应该可以使用它将XML附加到空体上。首先,在变量中创建一个Body
对象,然后将XML附加到其上。最后,将Body
对象传递到Request
对象。
// Create a Body object first, with no argument
$body = new http\Message\Body();
// Append your XML to it
$body->append($xml_part);
// Create the Request and pass $body to it
$request = new http\Client\Request("POST",
$endpoint,
["Api-Key" => $hotel_beds_config['api_key'],
"X-Signature" => $signature,
"Content-Type" => "application/xml",
"Accept" => "application/xml"],
// Pass in $body
$body
);
// Create an \http\Client object, enqueue, and send the request...
$client = new \http\Client();
// Set options as needed for your application...
$client->enqueue($request);
$client->send();
您尝试发布到provides a PHP SDK的API。如果SDK支持您希望使用的可用性功能,那么使用它可能更简单,而不是pecl_http(其文档有限)。然后,SDK会将所有HTTP消息传递抽象为一系列PHP方法和属性,从而消除对正确构造POST请求的任何疑问。