ネットワークアプリケーション(8):HTTPを使用してパッケージ

HTTPプロトコルはまた、カールを完了するために、HTTPリクエストを使用する方法について説明し、どのように反応する予定の要求行、ヘッダ、本文の前に話され、または。今回は、別の角度からのhttpパッケージと再びを使用した役割の一部を変更、永続的な努力をします。とにかく、唯一の目的:httpプロトコルの理解を深めます。

の(1)TCPを実装

HTTPと非話すTCPの実現ではない(なぜ?」以降の説明LL)、ソケットと、ソケットで使用されるTCPプロトコルを使用して、前に話している間は何をしたいのtcpを行うことができる、通信できるようになります。

そのソケットは何ですか?

ソケットは何チャンネルで、理解するためにあなたの言葉を使用しますか?それがああを伝えることができますので。チャンネルになる前ソケットは、チャネルがないので、完全ではないものの、すでにキーをキャッチされた「ソケットがチャネルである」、それが使用されているだけwaitの値です。しかし、抽象化の「フォーカス」はそれほど重要ではなく、完全または完璧の追求です。ソケットは、ネットワークノード(IP:ポート)は、データ・チャネルは、ノード間のデータ転送ができ介して、表すことができます。想像して、すべてのデータがソケットで完了、ネットワーク上で交換しました。

ソケットは、達成するための実際のコードで、単に抽象的な概念ではありませんが、あなたが見ることができる他に達成されたバイナリコードは、ですが、また、Windowsなど様々なプラットフォームで、UNIX、IOS、アンドロイド、などそれはこれらのプラットフォームであることを存在のどのような種類がありますか?それを達成するために誰ですか?

そのようなWikiページなどの情報と組み合わせること:

ソケットは、「Berkeleyソケット」またはと呼ばれるようにソケットは、カリフォルニア大学、Unixの20 1970年のバークレー版発祥「BSDソケット。」BSDソケットは、ソケットは、Windows / liunxを含む他のすべてのプラットフォームの祖先である、そのようなので、上のpython、javaのようにソケットを使用するいくつかの言語があります。BSDソケット実現C言語、対応する層cスタティックライブラリ(またはダイナミックリンクライブラリ)。

ソケットの窓マーティン・ホール、マーク・Towfiq(マイクロソフトに属する)と著作権の他人である、2つのメジャーバージョン、WINSOCK2とWinsock1のがありますが、ライブラリファイルを対応するWSOCK32.LIB / WS2_32.LIBでは、Windowsプラットフォームにしていますこのライブラリファイルのソケット操作を使用して。

まあ、ソケットの実現を書いたいくつかの特定のプラットフォームには、に行くことはありませんが、彼らの貢献のために感謝して、言いました。

その質問には、来て何を達成するためのソケットを?

TCPソケットは、HTTP、TCPプロトコルのトランスポート層に応じて、プロトコルスタックのアプリケーション層上に位置するので、それは、また、HTTPに重要であり、これは非常に重要です(UDPも)合意を達成するために、それは最終的な使用はhttpのTCP、と言うことですTCPソケットの実装を含むデータを、送信するために、あなたはその重要なことを言いますか?

だから、httpプロトコルがデータを送信するためのソケットに依存しているが、また、に依存しているに依存している、HTTP問答物事ソケット層を意味するものではありません。

の(1)のhttpを実装

HTTP異なるTCPで、HTTPは、これが問題のTCP層で、データがライン上に渡すために、とにかく、周りに渡されるかと心配していないですが、また、どのようなそれは、HTTPを検討しますか?この対話は非常に友好的(TCPデータとは異なり)を持ち、要求と応答ああの形式ですが、フォーマットを読むことができる人は、httpリクエストは非常にユーザーフレンドリーです。HTTPメッセージのフォーマット前に導入!

ヘッドラインが不可欠であり、ラインを含むHTTP要求または応答データについて、ヘッド。これは、パッケージが、これは関係なく、ソケットの、物事のソケットではないことに注意してください誰によって体の最初のラインを形成し、その後、誰が気に?

ツールカールチューブ形式のHTTPパッケージ(また、パイプデータトランシーバ)、JavaのHttpClientをチューブ形式のHTTPパッケージ、Pythonはまた、urllibは、チューブ形式のHTTPパッケージで、多くのツールやライブラリがあります(httpプロトコルをパッケージ化することができる唯一のhttpのhttpの点に注意してください。 TCPは別の問題ですので、契約は、TCPが含まれていません)、もちろん、あなたがパッケージHTTP形式を書き、問題はありません。

簡単に言えば、HTTPは、そのようなデータ・インタフェース・トランシーバを呼び出す方法を最初の要求を、組み立て方法として、物事が実際に送信が含まれていないか、それが問題のTCP層(ソケット)で、焦点はHTTPパッケージを実現し、プロトコル自体を実装している実現しましたどのようにGET、データを解釈し、またはPOSTはURLエンコードなどを、カプセル化します。あなたは、これはHTTPのアプリケーション層プロトコルのパフォーマンスである、でも近くに行ってきまし達成するために、断片化された多くの知識、業務の多くを見つけるでしょう。

必要でない場合については、優先順位は、具体的には、対応するオプションのために何をお使いのプラットフォームを見て、それを達成するための安定したHTTPパッケージとなっています。

(2)HTTPを使用

HTTPを使用することにより、カール、カール実際の使用方法と、HTTP構造の前に話すとき。はい、私たちは、「HTTPを使用する」直接はなく、むしろHTTPのツールを使用して、あなたが推奨されるようにHTTPClientを取得クラスのうち、既存のツールの優れた性能の一部を使用することができるよう、独自のツールを書くことができます後者で。

今回、私はhttpプロトコルを使用してそれらを介して、このようなurllibはやhttplibとしてPythonライブラリを、使用するツールの一部。

サーバに要求したい一般的な使用のhttpは、そのサーバーがどのように来ますか?あなたは限り、対応するURLが、実際には、あなただけのURLを要求できるように、自然のサーバーの束を見つけることができます。しかし、高いポイントを表示するために、私は、HTTPリクエストを受信するために、独自のWebサーバーをカスタマイズするためにここにいます。

Webサーバーをカスタマイズする方法?

プレゼンテーションの使用中に小さな道「PHPのプログラムは、」リードは、Apacheに来て、ApacheはWebサーバでは、HTTP要求を受け入れることができます。一方、Apacheは、HTTP要求に応じて、その他PHPパーサ、Pythonのパーサ、と対話することができます(PHPスクリプトまたはPythonスクリプトなどのように)いくつかのスクリプトコードを実行します。

ここでは、ApacheにHTTPリクエストを開始するApacheのHTTPレスポンスを返すPythonスクリプトを実行する方法を、あなたを示しています。

(A)は、そのApacheのPythonのように有効にすることができ

知識を説明押す前に、Apacheプロジェクトディレクトリは次のとおりです。/ライブラリ/ WebServer /ドキュメント、PHPスクリプトがここに置かれる前に。/ライブラリ/ WebServer / CGI-:しかし、それはCGIで説明する、CGIスクリプトは、プロジェクトディレクトリに配置するPythonスクリプトは、ディレクトリがある実行可能ファイル、 ので、あなたは、このディレクトリに配置するPythonスクリプトを記述します。hello.pyを作成、CGI-実行可能ファイルのディレクトリにGuannameduoをしないように、同じような何かを書きます:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

title="小程"
info="你好,first py script,关注微信公众号'广州小程'"
htmlcontent="<html><head><meta charset='utf-8'><title>%s</title></head><body><h2>%s</h2></body></html>" % (title,info)
print("Content-type:text/html")
print("")
print(htmlcontent)

そして、この文書それ(ノートのcgi-binディレクトリを要求)について要求するようにブラウザを開いて、その結果がこれです:
apacheのリターンスクリプトの内容

もちろん、これは私がそれを見たいものを、私はスクリプトコードを見ていないされていない、私は解釈されるスクリプトコードの内容を見てみたいです!

ブラウザなどのクライアントは、ApacheのApacheのPythonやPHPスクリプトを要求するが、対応するスクリプトインタプリタが見つからなかった場合は、スクリプトのapacheの内容が完全にブラウザに戻ります、(自身がスクリプトインタプリタを理解していないのapacheに注意してください) 、ソースが露出した場合には、それはおそらくあなたが見たいものではありません。

それでは、Apacheのスクリプトインタプリタ(ここではCGI)を見つけてみましょう、それは重要なステップです。

ApacheはApache実行するPythonスクリプトにそれを作る方法を、直接言うの話はもはや有効になっていませんか?あなたは、「のLoadModule phpx_module ...」のコメントを解除し、このラインである、(/民間の/ etc / apache2のディレクトリ)に変更しhttpd.confの後、Apacheの設定ファイルを作成し、ApacheのPHPのプログラムを呼び出してみましょう、あなたをすることができます覚えているかもしれPHPプログラムを呼び出し、それはまた、この変更のためのpythonではないでしょうか?はい、コメントを持ち上げるためにも、ビンゴ、しかし、これは次のようになります。

#LoadModule cgi_moduleのlibexec / apache2の/ mod_cgi.so

削除#の前で、あなたは、Apacheを再起動するように注意を払うことができるものを保存します。

sudoのapachectlの再起動

このとき、Apacheはmod_cgi.soロード、およびPythonのCGIスクリプトを説明するために使用されます。そして、ブラウザは、そのようなリターンを見るために、一度要請します:
Apacheは正しい内容を返します

簡単に言えば、PythonのCGIスクリプトを説明するために使用され、Apacheのは、Pythonスクリプトインタプリタの問題を解決するために言うことではないのcgiより多くのものを、それを有効にします。

(B)処理HTTPリクエストサーバ

これまでのところ、Apacheはすでに、私はあなたがそれで何をすべきか、このhello.pyを書いたことを、私が書いたPythonスクリプトを実行することができますか?もちろん、ブラウザに対処することは私にhttpリクエストを送りました。したがって、hello.pyそれはリクエストのパラメータ値に応じてこのような、ブラウザに異なるコンテンツを返すようにするために、それを変更します。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import cgi

title="广州小程"
info=""
paras = cgi.FieldStorage()
if paras.has_key('secret'):
    if paras['secret'].value=='free':
        info="<h1>welcome, you are so clever! secret is %s</h1>" % paras['secret'].value
    else:  
        info="<h1>wrong! secret is NOT '%s'</h>" % paras['secret'].value
else:
    info="<h1>NO! 请加上secret参数!</h1>"
htmlcontent="<html><head><meta charset='utf-8'><title>%s</title></head><body>%s</body></html>" % (title,info)
print("Content-type:text/html")
print("")

リクエストパラメータを取得cgi.FieldStorage使用するスクリプトは、このパラメータは異なるプロンプトを提供します。それは、異なるパラメータを渡すブラウザ要求を使用すると、このショーを見ることができます:
ときは秘密パラメータ
ないとき秘密のパラメータ
場合は、正しい秘密パラメータ

これまでのところ、すべてが良いですが、スクリプトが良いサーバは、ブラウザでも内容のリターンを参照してください、要求に応答することができますこと、でしょう、私は、Webサービスは、ああ、私はhttpプロトコルを使用する方法、言いたい行う方法をお教えしませんが、ああ!

(C)PythonでHTTPプロトコルを使用して

これが主な焦点です。クラス内でのpythonでクライアントを作成するためにここに示された、指示するための完全なhttpリクエスト、私はhttpプロトコルを使用する必要があります!

それぞれ、httplibを使用urllib2のを実証します。

import urllib2
url='http://localhost/cgi-bin/hello.py?secret=free'
req=urllib2.Request(url)
res=urllib2.urlopen(req)
res=res.read()
print(res)

コードが実行される上に、httpプロトコルカプセル化urllib2のクラスを使用して、要求を開始し、これが返されます。
urllib2の応答

import httplib
url='http://localhost/cgi-bin/hello.py?xx'
conn=httplib.HTTPConnection('localhost')
conn.request(method='GET', url=url)
res=conn.getresponse()
res=res.read()
conn.close()
print(res)

最初でHTTPConnectionで画像の多くのコードのこの作品は、リンク確立(特定のIPポートとを、ポートが省略され、デフォルトでは、デフォルトのWebサーバポートをある80を意味し、他の私のlocalhostが機械に固定されている)、その後、要求を開始します、その後、応答して、1人の行くを取ります。結果は次のようになります。
httplib的响应

より多くの要求が方法であるGET、POSTは、あなたがものを見て、また非常に簡単です。さて、すでに私たちは、httpプロトコルを使用するか、または少なくとも過ごすことになります。

この資料では、この操作は、HTTPのTCPの真理と話をしたことを理解するためには、httpプロトコルを使用する方法について主にですが、また、ApacheはPythonスクリプトを説明作り方について話しました、その最後のポイントは重要なデモで、それをまとめ、あなたは、少なくともそれがurllibはを知っていますそのようなクラスは、HTTPプロトコルを使用することができます!


what is import?

おすすめ

転載: www.cnblogs.com/freeself/p/11023564.html