http プロトコルを使用してブログ ガーデンのブログ投稿にコメントを公開します
このブログ投稿では、「php はソケットを使用して GET リクエストと POST リクエストを送信する」ことを前提としています。送信方法を検討するには、上でカプセル化された Http クラスを使用する必要があります。 php スクリプトを通じてブログ ガーデンのブログ投稿にコメントします。
原則:
これを行う前に、まずブログにコメントを送信する方法を理解する必要があります。 post 本質は、http プロトコル サーバー経由で post リクエストを送信することです。コメントを投稿する前に何をする必要がありますか?はい、ログインする必要があります。ただし、ログインについては別の問題なので、ここでは説明しません。ユーザーがログインすると、サーバーはクライアントに Cookie を設定します。 http はステートレスです。つまり、クライアントがサーバーにリクエストを送信した後、サーバーは応答を返します。 1回の通信が完了します。サーバーは、誰がリクエストを送信したかを覚えていません。したがって、クライアントは、サーバーによって設定された Cookie を使用してサーバーにリクエストを送信し、サーバーにその ID を通知する必要があり、サーバーは Cookie に基づいて応答を生成します。原理は非常にシンプルなので、実践的な部分を見てみましょう。
準備作業:
このテストを完了するために、ブログにログインした後、別のブログ パーク アカウント (DeanHuangChopper) を登録しました。 Park を開いて、私のブログ (DeanChopper) を開き、記事「PHP OB 関数を組み合わせたバッファリング メカニズムを理解する」などのブログ投稿を開きます (私は Firefox を使用しています。最大の利点は、どのようなパラメーターが送信されるかを直感的に確認できることです) )、開発者向けオプションを開き、コメントの送信プロセスを記録する準備をします。コメントを書いてコメントを残すだけです。今回は、リクエストは開発者向けオプションを介してログに記録されます。
リクエストヘッダーにのみ注意する必要があります。
当然のことながら、Http クラスの setHeader() メソッドを通じてリクエスト ヘッダー情報を設定し、post() メソッドを通じて送信します。まずはリクエストヘッダー情報を注意深く分析してみましょう。 Host、Content-type、Content-length は一部の http メソッドを通じてデフォルトで設定されるため、追加する必要はありません。ただし、Content-typeのタイプは「application/json; charset=UTF-8」となっており、HTTPのデフォルト設定の「application/x-www-form-urlencoded」とは異なりますので注意が必要です。リクエストボディは配列形式ではなく json 形式であるため、元の Http post メソッドを書き直す必要があります。
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> post(<span style="color: #800080;">$body</span><span style="color: #000000;">) { </span><span style="color: #800080;">$this</span>->setLine('POST'<span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 重新设置content-type</span> <span style="color: #800080;">$this</span>->setHeader('Content-Type:application/json; charset=UTF-8'<span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 跳过setBody方法 // $this->setBody($body);</span> <span style="color: #800080;">$this</span>->body[]=<span style="color: #800080;">$body</span><span style="color: #000000;">; </span><span style="color: #008000;">//</span><span style="color: #008000;"> 计算content-length</span> <span style="color: #800080;">$this</span>->setHeader('Content-length: ' . <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$this</span>->body[0<span style="color: #000000;">])); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">request(); </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$this</span>-><span style="color: #000000;">response; }</span>
Http クラスを再変更すると、この記事のメイン コードの作成が完了します。理論的には、ヘッダー情報を設定するときに Cookie 値を設定するだけで済みますが、成功率を高めるには、すべてのヘッダー情報を送信することが最善です。
コメントを送信する前に、送信パラメーターを確認してください:
「本文」の後に送信したいコンテンツを入力するだけです。 。
コード部分:
最後にこの記事のメインコードです:
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">require</span> "http.class.php"<span style="color: #000000;">;</span><span style="color: #800080;">$http</span>=<span style="color: #0000ff;">new</span> Http('http://www.cnblogs.com/mvc/PostComment/Add.aspx'<span style="color: #000000;">);</span>//设置头信息<span style="color: #800080;">$http</span>->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Accept-Encoding:gzip, deflate'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('X-Requested-With:XMLHttpRequest'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Referer:http://www.cnblogs.com/DeanChopper/p/4688667.html'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Cookie:_ga=GA1.2.1359064105.1438444082; __gads=ID=e0c32fd6db6e2a6d:T=1438443900:S=ALNI_Mb6AAflcBD6gcdHgeE3IqVDJYnnjA; .CNBlogsCookie=C8013C91E54C151DEDA30E2C1E842982338C9054A8BB8639AC2DAB7578445BF1DF5BC49D39D8BE5FDAC33541CE4E4FA386CFD3F946EA1D79D1E34809A4CCBD7488A15641AEF685A6258CF3F03597BCAF50049F8C95A310076677598990FB2E4FB1E9671A; _5t_trace_sid=84a9ed0b086c2c127551cf911bec7b1d; _5t_trace_tms=1; _gat=1'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Pragma:no-cache'<span style="color: #000000;">);</span><span style="color: #800080;">$http</span>->setHeader('Cache-Control:no-cache'<span style="color: #000000;">);<br>//设置请求体信息<br></span><span style="color: #800080;">$msg</span>='{"blogApp":"DeanChopper","postId":4688667,"body":"测试内容","parentCommentId":0}'<span style="color: #000000;">;<br>//发送post请求<br></span><span style="color: #800080;">$http</span>->post(<span style="color: #800080;">$msg</span><span style="color: #000000;">);</span><span style="color: #0000ff;">echo</span> 'OK';
送信プロセスは少し時間がかかる可能性があります。しばらくお待ちください。
最後に、ブロガーがこのブログ投稿をコメント送信のテストとして使用するのは構いませんが、文言には注意してください。