1

私が実行しているサーバーにデータを投稿する SublimeText 2 プラグインを作成しています。電車の中で携帯電話をWiFiホットスポットとして使って基本を書きましたが、すべてうまくいきました. その後、家に帰ると、何を投稿しようとしても、サーバーから 400 Bad Request 応答が返されました。ラップトップを個人用ホット スポットに戻すと、エラーは解消されました。詳細は次のとおりです。

この場合の「クライアント」は Sublime Text 2 です。ご存知ない場合は、それらのプラグインは Python で記述されており、urllib、urllib2、および httplib を使用してリクエストを処理しています。リクエストを行う関連する Python は次のとおりです。

params = urllib.urlencode({'title': 'ST2 Note', 'content': data, 'user': user, 'pass': pswd})

headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}

conn = httplib.HTTPConnection("staging.myserver.me:80")

conn.request("POST", "staging.myserver.me/st2", params, headers)

response = conn.getresponse()

data2 = response.read()

print data2

conn.close()

上記のコードは POST リクエストを問題なく送信します。特定の接続を使用している場合、サーバーはそれを確実に理解します。これは、POST データで送信したものをエコーバックするように設定しているためです。要求は PHP (Codeigniter) アプリケーションの一部に対して行われています。はい、この特定の URL に対して CSRF 保護がオフになるように特別に設定したので、それが問題ではないことがわかります。PHPコード自体はあまり面白くありませんが、サーバーヘッダーをエコーバックするように設定しました.これは、動作する接続からリクエストを行ったときに送信されたものです:

Host: staging.myserver.me
Accept-Encoding: identity
Content-Length: 56
Content-type: application/x-www-form-urlencoded
Accept: text/plain
Via: HTTP/1.1 akrmspsrvz9ts212.wnsnet.attws.com

サーバーが一部の接続からのリクエストを理解するが他の接続からのリクエストを理解しない理由はありますか?

4

1 に答える 1

1

うまくいったようです。私の問題を抱えている人が他にもいることは知っているので、何が起こったのか...

私が Python/HTTP1.1 初心者すぎて理解できないという理由から、"http://" を前に付けていないプランのホスト名が機能する場合があります。ISP とトラフィックのルーティング方法に関係があるはずですが、よくわかりません。したがって、修正は次の行を変更することでした:

conn.request("POST", "staging.myserver.me/st2", params, headers)

上記の行は問題を引き起こしました。しかし、これを次のように変更します。

conn.request("POST", "http://staging.myserver.me/st2", params, headers)

すぐに動作するようになりました!これが誰かの助けになることを願っています。400 のエラーは、500 のエラーと同じくらい不可解な場合があります。

于 2013-01-09T15:39:16.970 に答える