Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert Post und Get

PHP implementiert Post und Get

WBOY
WBOYOriginal
2016-07-30 13:30:351113Durchsuche

file_get_contents Version:

01 <?php

02/**

03 * 发送post请求

04 * @param string $url 请求地址

05 * @param array $post_data post键&#20540;对数据

06 * @return string

07 */

08functionsend_post($url, $post_data) {

09

10 $postdata= http_build_query($post_data);

11 $options= array(

12 'http'=> array(

13             'method'=> 'POST',

14             'header'=> 'Content-type:application/x-www-form-urlencoded',

15             'content'=> $postdata,

16             'timeout'=> 15 * 60 // 超时时间(单位:s)

17         )

18     );

19     $context= stream_context_create($options);

20     $result= file_get_contents($url, false, $context);

21  

22     return$result;

23 }

Wie folgt verwenden:

1 $post_data= array(

2     'username'=> 'stclair2201',

3     'password'=> 'handan'

4 );

5 send_post('http://blog.snsgou.com', $post_data);

Praktische Erfahrung:

Als ich den obigen Code verwendet habe, um eine http-Anfrage an einen anderen Server zu senden, stellte ich fest, dass, wenn der Server zu lange braucht, um die Anfrage zu verarbeiten, Das lokale PHP wird Anfragen unterbrechen, die sogenannten Timeout-Interrupts. Der erste Verdacht besteht darin, dass die Ausführungszeit von PHP selbst das Limit überschreitet. Denken Sie jedoch darüber nach, und dies sollte nicht der Fall sein, da das „PHP-Ausführungszeitlimit“ festgelegt wurde Laut diesem Artikel vor langer Zeit ([Empfohlen] Größenbeschränkung für PHP-Upload-Dateien) habe ich sorgfältig darüber nachgedacht, und nachdem ich darüber nachgedacht hatte, sollte es ein Zeitlimit für die http-Anfrage selbst sein, also habe ich darüber nachgedacht, wie ich es erhöhen kann das Zeitlimit der http-Anfrage. . . . . . Schauen Sie im PHP-Handbuch nach, dort gibt es tatsächlich einen Parameter „Timeout“, ich weiß nicht, wie groß es standardmäßig ist. Wenn Sie den Wert auf einen größeren Wert einstellen, wird das Problem gelöst~~~

Socket Version:

01 /**

02  * Socket版本

03  * 使用方法:

04  * $post_string = "app=socket&amp;version=beta";

05  * request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);

06  */

07 functionrequest_by_socket($remote_server,$remote_path,$post_string,$port= 80,$timeout= 30) {

08     $socket= fsockopen($remote_server, $port, $errno, $errstr, $timeout);

09     if(!$socket) die("$errstr($errno)");

10     fwrite($socket, "POST $remote_path HTTP/1.0");

11     fwrite($socket, "User-Agent: Socket Example");

12     fwrite($socket, "HOST: $remote_server");

13     fwrite($socket, "Content-type: application/x-www-form-urlencoded");

14     fwrite($socket, "Content-length: ". (strlen($post_string) + 8) . "");

15     fwrite($socket, "Accept:*/*");

16     fwrite($socket, "");

17     fwrite($socket, "mypost=$post_string");

18     fwrite($socket, "");

19     $header= "";

20     while($str= trim(fgets($socket, 4096))) {

21         $header.= $str;

22     }

23  

24     $data= "";

25     while(!feof($socket)) {

26         $data.= fgets($socket, 4096);

27     }

28  

29     return$data;

30 }

Curl-Version:

01 /**

02  * Curl版本

03  * 使用方法:

04  * $post_string = "app=request&version=beta";

05  * request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);

06  */

07 functionrequest_by_curl($remote_server, $post_string) {

08     $ch= curl_init();

09     curl_setopt($ch, CURLOPT_URL, $remote_server);

10     curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost='. $post_string);

11     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

12     curl_setopt($ch, CURLOPT_USERAGENT, "snsgou.com's CURL Example beta");

13     $data= curl_exec($ch);

14     curl_close($ch);

15  

16     return$data;

17 }

Curl-Version (2)

01 /**

02  * 发送HTTP请求

03  *

04  * @param string $url 请求地址

05  * @param string $method 请求方式 GET/POST

06  * @param string $refererUrl 请求来源地址

07  * @param array $data 发送数据

08  * @param string $contentType

09  * @param string $timeout

10  * @param string $proxy

11  * @return boolean

12  */

13 functionsend_request($url, $data, $refererUrl= '', $method= 'GET', $contentType= 'application/json', $timeout= 30, $proxy= false) {

14     $ch= null;

15     if('POST'=== strtoupper($method)) {

16         $ch= curl_init($url);

17         curl_setopt($ch, CURLOPT_POST, 1);

18         curl_setopt($ch, CURLOPT_HEADER,0 );

19         curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);

20         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

21         curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);

22         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

23         if($refererUrl) {

24             curl_setopt($ch, CURLOPT_REFERER, $refererUrl);

25         }

26         if($contentType) {

27             curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:'.$contentType));

28         }

29         if(is_string($data)){

30             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

31         } else{

32             curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

33         }

34     } elseif('GET'=== strtoupper($method)) {

35         if(is_string($data)) {

36             $real_url= $url. (strpos($url, '?') === false ? '?': ''). $data;

37         } else{

38             $real_url= $url. (strpos($url, '?') === false ? '?': ''). http_build_query($data);

39         }

40  

41         $ch= curl_init($real_url);

42         curl_setopt($ch, CURLOPT_HEADER, 0);

43         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:'.$contentType));

44         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

45         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

46         if($refererUrl) {

47             curl_setopt($ch, CURLOPT_REFERER, $refererUrl);

48         }

49     } else{

50         $args= func_get_args();

51         returnfalse;

52     }

53  

54     if($proxy) {

55         curl_setopt($ch, CURLOPT_PROXY, $proxy);

56     }

57     $ret= curl_exec($ch);

58     $info= curl_getinfo($ch);

59     $contents= array(

60             'httpInfo'=> array(

61                     'send'=> $data,

62                     'url'=> $url,

63                     'ret'=> $ret,

64                     'http'=> $info,

65             )

66     );

67  

68     curl_close($ch);

69     return$ret;

70 }

Ein Beispiel für den Aufruf der WCF-Schnittstelle: $json = restRequest($r_url,'POST', json_encode( $ data));

Das Obige stellt die Implementierung von Post und Get in PHP vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn