卷曲不会覆盖标题字段

时间:2014-10-10 20:16:17

标签: perl curl

我遇到了端点服务器返回“期望失败”问题的问题'发送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

2 个答案:

答案 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:';

可能还有其他问题。