2017-05-04 23 views
0

今はフォワードプロキシを作成しています。プロキシ接続のHTTP/sフロー

IveはHTTP/sコードに3つの問題がありました。 最初の1つは、リダイレクト[302](例:www.google.com)を処理しようとしているときはいつでもデータが得られないということです。 私はこのコードでリダイレクトを処理しています:

try: 
    response = requests.get("http://"+webserver, timeout=2) 
    if response.history: 
     print "Redirected to " + response.url 
     c = httplib.HTTPSConnection(response.url, port,config['CONNECTION_TIMEOUT']) 
    else: 
     print "Getting information from " + webserver 
     c = httplib.HTTPSConnection(webserver, port,config['CONNECTION_TIMEOUT']) 
except requests.exceptions.ConnectionError: 
    print "Getting information from " + webserver 
    c = httplib.HTTPSConnection(webserver) 

私はリダイレクトURLに直接接続することにより、最初のエラーを回避しようとしている場合は、第二の問題が表示されます。ウェブサイト(例:www.google.co.ilのhttp/sで保護されているウェブサイト)から受け取ったデータには、疑問符のような不要な文字が含まれています。ヘブライ語またはアラビア語の代わりに(英語はうまく動作します)。

私はこのコードを使用してデータを処理しています:

   c = httplib.HTTPSConnection(webserver) 
       while 1: 
        c.request("GET", "/") 
        response = c.getresponse() 
        # send request to web server 
        # Indiscriminately forward bytes 
        data = response.read() # NEED TO DECODE 
        print "DATA : ", data 
        if len(data) > 0: 
         conn.send(data) 
         print "DATA SENT!" 
        else: 
         break 
       c.close() 
       conn.close() 

そして、これは私が受けていたデータである(つまり、データのHTMLプレビューでの写真ですので、私は、ここにすべてのものを含めることはできません):The data

最後に私が遭遇した問題は、データがブラウザに送信されないということです。プロキシはデータを受け取りますが(第2の問題のように)、何らかの理由でデータをブラウザに転送していません。 (コードは第2の問題と同じです)。

ブラウザショーこのエラー:ERR_TUNNEL_CONNECTION_FAILED

非常に高く評価されるだろうすべてのヘルプ!事前に

おかげで、Yahli

*編集:あなたの助け:)

+2

Googleがあなたの国のドメインにリダイレクトしないようにするには、https://www.google.com/ncrを使用してhttps://www.google.com – Mani

+0

に転送してください。私は最初に他の問題についてさらに助けが必要です。 –

答えて

1

生のバイトがあるあなたがソケットから読んでいる何が必要それでもanswer.Iを見つけることができませんでした。私はあなたが以下のようにstr.decode()を介して第1 UTF-8にそれらを配置する必要があると思う:

data = response.read().decode('utf8') 

コンテンツは常にUTF-8でコード化されていないことに注意してください。応答ごとに個別にContent-Type HTTPヘッダーをチェックする必要があります。

ブラウザに関する問題:適切なHTTPヘッダーをクライアントに送信することを忘れてしまった可能性があります。または、実際には、あらゆる種類のヘッダーセクション。

+0

Aight、私はこのトピックの詳細を読んだので、いくつかの問題を修正しました。ありがとう!ちょうどそのうち、Requestsモジュールは、Content-Typeヘッダーにデフラグしてエンコーディングを処理するので、再度エンコードする必要はありません:) –