2014-10-10 60 views
1

我遇到了端點服務器在發送1024kb後返回'417 Expectation Failed'錯誤的問題。我不相信在請求發送到端點之前,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

按照HTTP規範「與417服務器必須響應,如果任何expections不能得到滿足」。如果ANYTHING出現上傳錯誤,那麼它應該使用錯誤代碼進行響應,但是您只希望/允許100次繼續,所以它必須以417響應。如果它總是在1024kb之後死掉,那麼這強烈建議你超過1meg文件上傳限制,但服務器不能告訴你,因爲你不允許它在@Marc B上 – 2014-10-10 20:19:07

+1

,OP正試圖清除Expect標題。 – ikegami 2014-10-10 21:30:22

回答

1

你想變化一個頭和刪除另外一個,所以有兩個-H調用捲曲用途:

-H 'Content-Type: text/xml' -H 'Expect:' 

也就是說,每個-H改變一個頭,所以你需要一個 - H表示要修改的每個標題。

與錯誤池上結合所指出的,這意味着你需要

push @curl_vars, '-H', 'Content-Type: text/xml'; 
push @curl_vars, '-H', 'Expect:'; 
-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:'; 

可能有其他問題。