2016-03-30 80 views
0

我想通過Python腳本調用SMS網關。我建立一個HTTP請求如下:Python urllib2 POST到短信網關[Errno 10054]

http_req = url 
http_req += '?' 
http_req += 'producttoken='+token 
http_req += '&msg='+urllib.quote(message) 
http_req += '&to='+dest 
http_req += '&from='+sender 

然後我發送一個請求:

req = urllib2.Request(http_req) 
try: 
    response = urllib2.urlopen(req) 
    response_url = response.geturl() 
    print response_url 
    if response_url==url: 
    print 'SMS sent!' 
except urllib2.URLError, e: 
    print 'Send failed!' 
    print e.reason 

結果,我得到:

Send failed! 
[Errno 10054] An existing connection was forcibly closed by the remote host 

但是,如果我複製組成網址(在網頁瀏覽器中使用print http_req), 我在目標號碼(dest)處收到一條SMS(上面代碼中的message值)。網址是這樣的:

https://smsgw.com/gateway.ashx?producttoken=c98f7b71-xyz23-4429-9daa-9647&body=SMS%20Gateway%20Test%20message&to=00331234567&from=MyApp 

這是否與我從Python發送請求有什麼關係?是否有任何解決方法,例如通過向帖子添加標題?

+0

也許用戶代理...,使用您自己的提琴手或網頁瀏覽器來查看您的python請求和「手工製作」請求之間的區別。 – Goufalite

+0

您能解釋一下如何在網頁瀏覽器中看到「手工製作」的請求嗎? – QuestionMark

+1

這取決於您使用的瀏覽器:在Chrome中按F12打開developper工具,按F5重新加載頁面並檢查網絡選項卡 – Goufalite

回答

0

當遠程主機未按照預期的格式接收數據並重置連接時,通常會導致該錯誤。 (其他情況可能會導致此錯誤,例如網絡連接失敗或遠程主機出現問題,但在您的情況下似乎不太可能。)

您可以嘗試使用wireshark來確定實際發送的數據包與相應地修改您的腳本。

這可能wireshark可能無法爲您工作取決於多遠的數據包越來越。在這種情況下,您可以嘗試使用Service Trace Viewer