远程请求数据Get 和post区别

标签: , , ,

正在查看 3 条回复
  • 作者
    帖子
    • Frank Chen - WirelessLink社区Frank Chen
      版主
      #1421
      Up
      3
      Down
      ::

      1、GET在浏览器回退时是无害的,而POST会再次提交请求。
      2、GET产生的URL地址可以被Bookmark,而POST不可以。
      3、GET请求会被浏览器主动cache,而POST不会,除非手动设置。
      4、GET请求只能进行url编码,而POST支持多种编码方式。
      5、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
      6、GET请求在URL中传送的参数是有长度限制的,而POST没有。
      7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
      8、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
      9、GET参数通过URL传递,POST放在Request body中。
      10、GET产生一个TCP数据包,POST产生两个TCP数据包

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • Frank Chen - WirelessLink社区Frank Chen
      版主
      #1422
      Up
      0
      Down
      ::
      一份完整的php curl请求代码示例
      function curlRequest($url, array $params, $method = 'POST', array $headers = array())
      {
      // 1.初始化一个curl会话资源
      $ch = curl_init();
      // 2.设置curl会话的选项
      curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // 强制使用 HTTP/1.0
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // 发起连接前等待超时的时间,如果设置为0,则无限等待
      curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置curl允许执行的最长秒数
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 是否将curl_exec()获取的信息返回,而不是直接输出
      curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // 设置HTTP请求头中"Accept-Encoding: "的值
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 启用时会将服务器返回的"Location: "放在header中递归的返回给服务器
      curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 设置HTTP重定向的最大数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 是否需要进行服务端的SSL证书验证
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 是否验证服务器SSL证书中的公用名
      curl_setopt($ch, CURLOPT_HEADER, false); // 是否抓取头文件的信息
      //curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 设置HTTP请求头
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //头部要送出'Expect: '
      curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); //强制使用IPV4协议解析域名
      
      curl_setopt($ch, CURLINFO_HEADER_OUT, true);
      
      switch (strtoupper($method)) {
      case 'POST':
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
      break;
      
      case 'GET':
      $url = "{$url}?" . http_build_query($params);
      break;
      
      case 'DELETE':
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
      $url = "{$url}?" . http_build_query($params);
      break;
      
      default:
      return 'invalid request method';
      }
      
      curl_setopt($ch, CURLOPT_URL, $url); // 设置需要请求的URL地址,也可以在 curl_init()函数中设置
      
      // 3.执行curl会话
      $response = curl_exec($ch);
      
      // 4.关闭curl会话,释放资源
      curl_close($ch);
      
      return $response;
      }

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • Frank Chen - WirelessLink社区Frank Chen
      版主
      #1424
      Up
      0
      Down
      ::

      cURL 的 ipv6、ipv4 选择策略

      1> cURL 对ipv4、ipv6是这样一个处理过程:

      解析被请求的域名,通常会获得一个ip地址列表,同时包含了ipv4和ipv6地址;
      cURL会首先发起连接ipv6地址,如果200ms内连接成功,则直接使用此地址;
      如果200ms未连接成功ipv6地址,cURL会对列表中地址并发发起连接;
      最后等待第一个成功建立的连接,将作为后续cURL传输地址。

      从上面流程可以看出几点:ipv6优先机制、快乐眼球(Happy Eyeballs)机制(也叫快速回退Fast Fallback机制)、轮询调度机制(Round-robin DNS)。

       

      2> Happy Eyeballs 是什么?
      “快乐眼球”是客户端的一个算法,它叫这么个名字,是想表达这个算法是用在互联网中的用户端(客户端)而不是服务器端。这里有一个比较好的文章。

      cURL的实现不是简单的执行:getaddrinfo() -> 遍历每个ip地址然后并发发起 connect()。它的做法将全部地址分开到一个ipv4专用和一个ipv6专用的两个线程队列,然后再并发发起连接,最先收到回复的连接作为最终使用的连接。

      这个算法的提出是在2011年 World IPv6 Day,为了避免 ipv6 起步阶段网络环境不理想。

      除了cURL,目前支持 Happy Eyeballs 其它软件包括 Chrome 浏览器, Opera 浏览器, Firefox 13+, 苹果操作系统 OS X 等。

       

      3>为 cURL 指定 ipv4,ipv6
      通过命令行参数 –ipv4 或 -4 强制使用 ipv4 协议:

      % time curl –ipv4 https://example.org/

      可以显示ipv4连接过程和连接的时间

       

      % curl –ipv4 https://example.org/
      复制代码
      通过命令行参数 –ipv6 或 -6 强制使用 ipv6 协议:

      % curl –ipv6 https://example.org/
      复制代码
      加上参数 -v 可以看到连接的过程:

      % curl -v http://example.org/ ~
      * Trying 192.168.199.217...
      * TCP_NODELAY set
      * Connection failed
      * connect to 192.168.199.217 port 80 failed: Connection refused
      * Trying 2001::1...
      * TCP_NODELAY set
      * Connected to example.org (2001::1) port 80 (#0)
      > GET / HTTP/1.1
      > Host: example.org
      > User-Agent: curl/7.64.1
      > Accept: */*
      >

       

       

      4>nslookup 做 DNS 解析
      # type 和 query、querytype 三个相同作用的参数,用于设置查询类型,默认值为 A

      % nslookup -type=A example.test
      Server: 192.168.199.1
      Address: 192.168.199.1#53
      
      Name: example.test
      Address: 192.168.199.169
      
      % nslookup -type=AAAA example.test
      Server: 192.168.199.1
      Address: 192.168.199.1#53
      
      example.test has AAAA address 2001::2

       

      5>dig 解析 DNS
      # 同时解析 ipv4 和 ipv6
      % dig example.test AAAA example.test A +short

      2001::2
      192.168.199.169

      # @域名服务器在前面表示全球服务器
      % dig @8.8.8.8 tv.ipv6.edu.cn AAAA

      ; <<>> DiG 9.10.6 <<>> @8.8.8.8 tv.ipv6.edu.cn AAAA
      ; (1 server found)
      ;; global options: +cmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 84
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
      
      ;; QUESTION SECTION:
      ;tv.ipv6.edu.cn. IN AAAA
      
      ;; ANSWER SECTION:
      tv.ipv6.edu.cn. 3600 IN AAAA 2001:da8:217:1::234
      
      ;; Query time: 158 msec
      ;; SERVER: 8.8.8.8#53(8.8.8.8)
      ;; WHEN: Mon Sep 28 09:11:02 CST 2020
      ;; MSG SIZE rcvd: 60

       

      # @域名服务器在后面表示本地服务器
      % dig wikimedia.org MX @ns0.wikimedia.org

      ; <<>> DiG 9.6.1 <<>> wikimedia.org MX @ns0.wikimedia.org
      ;; global options: +cmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61144
      ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
      ;; WARNING: recursion requested but not available
      
      ;; QUESTION SECTION:
      ;wikimedia.org. IN MX
      
      ;; ANSWER SECTION:
      wikimedia.org. 3600 IN MX 10 mchenry.wikimedia.org.
      wikimedia.org. 3600 IN MX 50 lists.wikimedia.org.
      
      ;; ADDITIONAL SECTION:
      mchenry.wikimedia.org. 3600 IN A 208.80.152.186
      lists.wikimedia.org. 3600 IN A 91.198.174.5
      
      ;; Query time: 73 msec
      ;; SERVER: 208.80.152.130#53(208.80.152.130)
      ;; WHEN: Wed Aug 12 11:51:03 2009
      ;; MSG SIZE rcvd: 109

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • Frank Chen - WirelessLink社区Frank Chen
      版主
      #1425
      Up
      0
      Down
      ::

      curl 常见使用命令

      # 显示响应首部信息
      curl -I www.baidu.com
      
      # 模拟浏览器
      curl -A "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25" www.baidu.com
      
      # 静默模式,不显示curl进度
      curl -s www.baidu.com
      
      # 显示一次通信详情信息
      curl -v www.baidu.com
      
      # 显示详情并时间戳跟踪
      curl -v --trace-time www.baicu.com
      
      # 指定 GET 请求访问百度,
      curl -X GET www.baidu.com 同 curl -G www.baidu.com
      
      # 向 httpbin.org 发送 POST 请求
      curl -s -X POST "http://www.httpbin.org/post" -H "accept: application/json"
      
      # 自定义Header至百度
      curl -H "name:zzw" www.baidu.com
      
      # 完成请求且成功的操作后输出指定格式的内容到标准输出
      curl -s "http://www.baidu.com" -H "Content-Type: text/html;charset=utf-8" -w '\n%{time_total}\n' -d 'wd=json'

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
正在查看 3 条回复
  • 哎呀,回复话题必需登录。
WirelessLink社区
Logo