PHP发送HTTP请求的几种方式

转发:https://blog.tanteng.me/2017/07/php-curl-guzzlehttp/

1)PHP开发中我们常用CURL 方式封装 HTTP请求,什么是CURL?

  CURL 是一个用来传输数据的工具,支持多种协议,如在 Linux 下用 curl 命令行可以发送各种 HTTP 请求。PHP 的 cURL 是一个底层的库,它能根据不同协议跟各种服务器通讯,HTTP 协议是其中一种。

  现代化的 PHP 开发框架中经常会用到一个包,叫做 GuzzleHttp,它是一个 HTTP 客户端,也可以用来发送各种 HTTP 请求,那么它的实现原理是什么,与 cURL 有何不同呢?

2)Does Guzzle require cURL?

  这是 GuzzleHttp 文档 FAQ 中的一个 Question,可见 GuzzleHttp 并不依赖 cURL 库,而支持多种发送 HTTP 请求的方式。

那么这里整理一下除了使用 CURL 外 PHP 发送 HTTP 请求的方式。

1、curl

  略过

2.stream流的方式

  stream_context_create 作用:创建并返回一个文本数据流并应用各种选项,可用于 fopen(), file_get_contents() 等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

以一个 POST 请求为例:

<?php
/**
 * Created by PhpStorm.
 * User: tanteng
 * Date: 2017/7/22
 * Time: 13:48
 */
function post($url, $data)
{
    $postdata = http_build_query(
        $data
    );

    $opts = array(‘http‘ =>
             array(
                 ‘method‘ => ‘POST‘,
                 ‘header‘ => ‘Content-type: application/x-www-form-urlencoded‘,
                 ‘content‘ => $postdata
             )
    );
    $context = stream_context_create($opts);
    $result = file_get_contents($url, false, $context);
    return $result;
}

 理解PHP中的Streams 

3.socket方式

  使用套接字建立连接,拼接 HTTP 协议字符串发送数据进行 HTTP 请求。

  一个 GET 方式的例子:

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

  本文介绍了发送 HTTP 请求的几种不同的方式。

原文地址:https://www.cnblogs.com/dump/p/8259091.html

时间: 2024-10-10 16:46:29

PHP发送HTTP请求的几种方式的相关文章

php发送post请求的4种方式

http://blog.163.com/fan_xy_qingyuan/blog/static/188987748201411943815244/ class Request{ public static function post($url, $post_data = '', $timeout = 5){//curl $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_POST,

android 向服务器Get和Post请求的两种方式,android向服务器发送文件,自己组装协议和借助第三方开源

/** * @author [email protected] * @time 20140606 */ package com.intbird.utils; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream

C#中Post请求的两种方式发送参数链和Body的

POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds public class KeyWordController : BaseController { private string listClassUrl = "http://192.168.1.171:8789/keywords/list_class"; public ActionResult L

解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)

这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个SharePoint库,验证一下该帐号是否具有对该SharePoint web应用程序具有至少“完全读取”的权限. 当我在升级上来的SharePoint环境中对我新建的博客URL进行爬网时遇到了这个错误. 这个错误发生在当你运行Windows 2008 R2和SharePoint 2010并且爬网进程试图访问一

php 发送post、get请求的三种方式

// 发送post请求 // @param string $url 请求地址 // @param array $post_data post键值对数据 // @return string function sendPost($url, $post_data){ // http_build_query() // 生成URL-encode之后的请求字符串 // // 备注: // php5.3的分隔符用的是&,如果目标服务器也是php5.3,那么就不会出错. // 但是如果目标服务器是java的to

(转) c/c++调用libcurl库发送http请求的两种基本用法

libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multi interface方式,前者是采用阻塞的方式发送单条数据,后者采用组合的方式可以一次性发送多条数据 一.Easy interface libcurl的easy interface是最基本的用法,简要流程为: 1.在主线程中调用curl_global_init(CURL_GLOBAL_ALL)初始化 2.调用curl_easy_init获取一个句柄: 3.调用curl_easy_setopt函数

springmvc 前端 发ajax请求的几种方式

一.传json单值或对象 1.前端 1 var data = {'id':id,'name':name}; 2 $.ajax({ 3 type:"POST", 4 url:"user/saveUser", 5 dataType:"json", 6 //contentType:"application/json", //不能添加这个头 7 data:data, //这里不能进行JSON.stringify,发送请求的数据在:fo

php发送http请求的几种方法

有很多时候,我们还是需要用php去发送http请求的,它可以模拟浏览器的行为,通常它的应用场景有:1.后端测试自己的接口.2.后端请求别人的数据. 后端测试自己的接口,比如我们写了一个返回json数据的接口,我们可以让前端去测,但是前端不一定有空啊,或者前端界面还没做出来,由于界面不一定是现成的,因此测试起来也会有点麻烦.当然我们可以用谷歌浏览器的postman或者火狐的poster,这些都可以发送post.delete请求等等,但是它们应用起来并没有那么爽.因此,我们可以实用php编程的方式来

java实现HTTP请求的三种方式

目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpClient4.5是org.apache.http.client下操作远程 url的工具包,最新的:另一