2017-05-03 97 views
1

來自bash/curl我正在使用接收POST的API,執行繁重的長時間任務,並在成功時返回200。正如我們所面臨的在WAF某些超時,API已得到改進,接受標頭:如何在bash中處理HTTP 102?

--header「期望值:102-處理」

如果API接收到報頭髮送一個HTTP 102每20秒直到進程完成併發送一個HTTP 200.這應該足以防止超時。

我該怎麼處理這些HTTP 102?

我將該標題添加到了我的curl命令中,但只要它收到第一個102,curl命令就完成了。

  • 我在想,也許curl中有一個參數要等到200或錯誤。
  • 我心裏有另一種選擇是等待的狀態的循環查詢,但我不知道如何指導捲曲,以監視連接

這是我的bash腳本的測試版本。

#!/bin/bash 
clear 

function_triggerFooAdapter() 
{ 
    pFooUrl=$1 
    pPayload=$2 
    pCURLConnectTimeout=$3 
    pWaitForFooResponse=$4 
    pAddExpect102Header=$5 

    rm ./tmpResult.html 2>/dev/null 
    rm ./tmpResult.txt 2>/dev/null 

    echo "Triggering internal Foo adapter $pFooAdapterName" 
    echo "Full URL=$pFooUrl" 
    echo "Payload to send=$pPayload" 
    echo "Curl connect-timeout=$pCURLConnectTimeout" 
    echo "WaitForFooResponse=$pWaitForFooResponse" 
    echo "AddExpect102Header=$pAddExpect102Header" 

    if [[ "$pAddExpect102Header" = true ]]; then 
    text102Header="Expect:102-Processing" 
    else 
    text102Header="NoExpect;" # send innofensive custom header 
    fi 

    if [[ "$pWaitForFooResponse" = true ]]; then 
    echo "So DO wait..." 
    Response=$(curl -k --write-out %{http_code} --header "$text102Header" --header "Content-Type:application/json" --silent --connect-timeout $pCURLConnectTimeout --output ./tmpResult.html -X POST --data "$pPayload" "$pFooUrl" 2>&1 | tee ./tmpResult.txt) 
    echo "HTTP Response=$Response" 
    echo "$(cat ./tmpResult.txt)" 

    if [ "${Response:0:1}" -eq "1" ] || [ "${Response:0:1}" -eq "2" ]; then #if HTTP Response start by 1 or 2 (10x - 20x)... 
     echo "Adapter sucessfully triggered." 
     return 0 
    else 
     # cat ./tmpResult.html 2>/dev/null 
     #cat ./tmpResult.txt 2>/dev/null 
     echo 
     echo "HTTP error trying to trigger adapter." 
     return 1 
    fi 
    else 
    echo "So DO NOT wait..." 
    curl -k --write-out %{http_code} --header "$text102Header" --header "Content-Type:application/json" --silent --connect-timeout $pCURLConnectTimeout --output ./tmpResult.html -X POST --data "$pPayload" "$pFooUrl" > /dev/null 2>&1 & 
    echo "Adapter sucessfully (hopefully) triggered. NOT reading HTTP response until Foo code is upgraded to respond directly a HTTP 200 Successfully queued or similar." 
    return 0 
    fi 

} 

clear 
export http_proxy="http://1.1.1.256:3128/" 
export https_proxy="http://1.1.1.256:3128/" 
export no_proxy="foo.com" 

# Main 
clear 
echo "STEP 09- Triggering Foo Internal Adapters." 
echo "Proxy settings:" 
env | grep proxy 

function_triggerFooAdapter "http://foo.com/lookups/trigger_foo" "" 600 true true 

回答

1

運行它手動和CHECK什麼捲曲-v正在發送的報頭;我希望看到類似於

> POST /the/url HTTP/1.1 
> Host: thehost.com:80 
> User-Agent: curl/7.51.0 
> Accept: */* 
> Expect: 102-Processing 
... some stuff skipped. 

如果您不發送Expect標題;然後捲曲實際上是做正確的事情..