我遇到了端点服务器返回“期望失败”问题的问题'发送1024kb后出错。在请求发送到端点之前,我不相信curl会正确地重写标头。我使用-H标志并阅读了许多不同的线程,包括curl联机帮助页,试图了解我可能做错了什么。
我在Perl写作。以下是我设置标题的方法。
my $curlpath = "/usr/local/bin/curl";
my $xml = #-- yes, xml is really passed but i omitted it
push @curl_vars, "-H 'Content-Type: text/xml; Expect:'"; #-- header flag
push @curl_vars, "-v"; #-- verbose mode
push @curl_vars, "-d"; #-- data flag
push @curl_vars, $xml; #-- data
push @curl_vars, $endpoint;
eval
{
#-- command line execution
open (FILE, "-|") || exec $curlpath, @curl_vars;
$response = join '', <FILE>;
close (FILE);
};
以下是日志中修剪过的卷曲响应。
[Fri Oct 10 16:04:36 2014] > Host: myhost.com\r
[Fri Oct 10 16:04:36 2014] > Accept: */*\r
[Fri Oct 10 16:04:36 2014] > 'Content-Type: text/xml; Expect:'\r
[Fri Oct 10 16:04:36 2014] > Content-Length: 1069\r
[Fri Oct 10 16:04:36 2014] > Content-Type: application/x-www-form-urlencoded\r
[Fri Oct 10 16:04:36 2014] > Expect: 100-continue\r
[Fri Oct 10 16:04:36 2014] > \r
[Fri Oct 10 16:04:36 2014] * HTTP 1.0, assume close after body
[Fri Oct 10 16:04:36 2014] < HTTP/1.0 417 Expectation Failed\r
[Fri Oct 10 16:04:36 2014] < Connection: close\r
[Fri Oct 10 16:04:36 2014] < Content-Length: 18\r
[Fri Oct 10 16:04:36 2014] < \r
答案 0 :(得分:1)
您希望更改一个标头并删除另一个标头,因此请使用两个-H使用调用curl:
-H 'Content-Type: text/xml' -H 'Expect:'
也就是说,每个-H更改一个标题,因此您需要为要修改的每个标题使用一个-H。
结合ikegami指出的错误,这意味着你需要
push @curl_vars, '-H', 'Content-Type: text/xml';
push @curl_vars, '-H', 'Expect:';
答案 1 :(得分:-1)
当你说
时curl -H 'Content-Type: text/xml; Expect:'
你用两个参数调用curl
。
-H
Content-Type: text/xml; Expect:
但是,在Perl代码中,您传递单个参数。
-H 'Content-Type: text/xml; Expect:'
也许你需要
push @curl_vars, '-H', 'Content-Type: text/xml; Expect:';
可能还有其他问题。