>  기사  >  백엔드 개발  >  http 프로토콜을 사용하여 블로그 게시물 댓글 게시

http 프로토콜을 사용하여 블로그 게시물 댓글 게시

WBOY
WBOY원래의
2016-08-08 09:19:18814검색

이 블로그 게시물은 "php는 소켓을 사용하여 GET 및 POST 요청을 보냅니다."를 따릅니다. PHP 스크립트를 통해 블로그 가든의 블로그 게시물에 댓글을 제출하는 방법을 고려하려면 위에 캡슐화된 Http 클래스를 사용해야 합니다.

원칙:

이 작업을 수행하기 전에 블로그 게시물에 댓글을 제출하는 본질은 http를 통해 게시물 요청을 보내는 것임을 먼저 이해해야 합니다. 프로토콜 서버. 댓글을 게시하기 전에 무엇을 해야 합니까? 예, 로그인해야 합니다. 하지만 로그인은 또 다른 문제이므로 여기서는 다루지 않겠습니다. 사용자가 로그인하면 서버는 클라이언트에 쿠키를 설정합니다. http는 무국적입니다. 즉, 클라이언트가 서버에 요청을 보낸 후 서버는 응답을 반환합니다. 하나의 통신이 완료되었습니다. 서버는 누가 자신에게 요청을 보냈는지 기억하지 못합니다. 따라서 클라이언트는 서버가 설정한 쿠키를 이용해 서버에 요청을 보내고 자신의 신원을 서버에 알려야 하며, 서버는 쿠키를 기반으로 응답을 생성합니다. 원리는 매우 간단합니다. 실제적인 부분을 살펴보겠습니다.

준비:

이 테스트를 완료하기 위해 다른 블로그 계정(DeanHuangChopper)을 등록했습니다. 블로그에 로그인한 후 내 블로그(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>public</span><span>function</span> post(<span>$body</span><span>) {      
        </span><span>$this</span>->setLine('POST'<span>);

        </span><span>//</span><span> 重新设置content-type</span><span>$this</span>->setHeader('Content-Type:application/json; charset=UTF-8'<span>);
        
        </span><span>//</span><span> 跳过setBody方法
        // $this->setBody($body);</span><span>$this</span>->body[]=<span>$body</span><span>;

        </span><span>//</span><span> 计算content-length</span><span>$this</span>->setHeader('Content-length: ' . <span>strlen</span>(<span>$this</span>->body[0<span>]));

        </span><span>$this</span>-><span>request();

        </span><span>return</span><span>$this</span>-><span>response;
    }</span>

Http 클래스를 다시 수정하면 이 글의 메인 코드 작성을 완료할 수 있습니다. 이론상으로는 헤더 정보를 설정할 때 쿠키 값을 설정하는 것만으로도 충분하지만, 성공률을 높이려면 헤더 정보를 모두 보내는 것이 가장 좋습니다.

댓글을 보내기 전에 전송 매개변수를 살펴보세요.

"body" 다음에 보내고 싶은 내용만 입력하면 됩니다. .

코드 부분 :

마지막으로 이 글의 메인 코드:

<?<span>php 

</span><span>require</span> "http.class.php"<span>;


</span><span>$http</span>=<span>new</span> Http('http://www.cnblogs.com/mvc/PostComment/Add.aspx'<span>);
</span>//设置头信息
<span>$http</span>->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'<span>);
</span><span>$http</span>->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'<span>);
</span><span>$http</span>->setHeader('Accept-Encoding:gzip, deflate'<span>);
</span><span>$http</span>->setHeader('X-Requested-With:XMLHttpRequest'<span>);
</span><span>$http</span>->setHeader('Referer:http://www.cnblogs.com/DeanChopper/p/4688667.html'<span>);
</span><span>$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>);
</span><span>$http</span>->setHeader('Pragma:no-cache'<span>);
</span><span>$http</span>->setHeader('Cache-Control:no-cache'<span>);
<br>//设置请求体信息<br></span><span>$msg</span>='{"blogApp":"DeanChopper","postId":4688667,"body":"测试内容","parentCommentId":0}'<span>;
<br>//发送post请求<br></span><span>$http</span>->post(<span>$msg</span><span>);

</span><span>echo</span> 'OK';

전송이 다소 느릴 수 있으니 조금만 기다려주세요.

마지막으로, 블로거들이 내 블로그 게시물을 댓글 보내기 테스트로 사용하는 것은 괜찮지만 표현에 주의하시기 바랍니다.

위 내용은 콘텐츠 측면을 포함하여 블로그 게시물 댓글을 게시하기 위해 http 프로토콜을 사용하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.