我想连接一个简单的Web服务。为了发布一些XML
,它将在Web服务端正确地进行,我需要准备一个正确的请求。我使用cURL
来完成此任务,如下所示:
try {
$ch = curl_init();
if (FALSE === $ch)
throw new Exception('failed to initialize');
curl_setopt($ch, CURLOPT_URL,"192.168.1.37");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/xml',
'Connection: Keep-Alive'
));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_PROXY, '');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect: "));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);
$request= curl_getinfo($ch);
var_dump($request);
$content = curl_exec($ch);
if (false === $content) {
throw new Exception(curl_error($ch), curl_errno($ch));
}
} catch(Exception $e) {
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),E_USER_ERROR);
}
首先我显示来自curl_getinfo($ch);
的请求主体,然后我显示来自$content
变量的响应。
发送到服务器的请求的唯一限制是Content-Type
头-它必须是application/xml
,否则服务器将以错误响应(这不是我的主意,我对此无能为力)
输出请求如下:array(21) { ["url"]=> string(68) "192.168.1.37" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(0) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } }
响应为HTTP 400 Bad Request
我可以看到的是["content_type"]=> NULL
,但我在PHP代码中设置了这个变量...
谁能告诉我我错过了什么?
1条答案
按热度按时间ca1c2owp1#
您设置了两次HTTP_HEADER:
我想这就是问题所在。第二次设置时,你删除了第一次的设置。