HTTP请求详解含POST,GET实例

HTTP请求详解含POST,GET实例前言单纯的 copy 代码没有用 本篇从 http 请求的基本原理开始为大家讲解 后边有实例 希望大家一步一步看完 这样无论编写什么请求我们都可以得心应手 HTTP 的组成 http 消息由客户端到服务端的请求以及服务端到客户端的响应组成 HTTP 请求报文的格式请求头与请求正文中间有一行空行 是告诉服务器请求头到此结束了接下来是请求正文请求方法 get post head delete 等等 告诉服务器你的具体操作

前言

单纯的copy代码没有用,本篇从http请求的基本原理开始为大家讲解,后边有实例,希望大家一步一步看完,这样无论编写什么请求我们都可以得心应手。

HTTP的组成

http消息由客户端到服务端的请求以及服务端到客户端的响应组成

HTTP请求报文的格式

HTTP请求详解含POST,GET实例

请求头与请求正文中间有一行空行,是告诉服务器请求头到此结束了接下来是请求正文

请求方法:get,post,head,delete等等,告诉服务器你的具体操作是什么

URL:可以从互联网上得到资源的位置和访问方法的一种简洁标识。URL结构:协议://域名 or IP地址:端口号/目录/文件名.文件名后缀?参数=值
协议版本:目前几乎用的都是http1.1版本,增加了一个很重要的特性它支持长连接,其他具体细微差别不做讲述。
请求头:请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
常用的请求头包括:HTTP请求详解含POST,GET实例
HTTP请求详解含POST,GET实例 HTTP请求详解含POST,GET实例

HTTP请求详解含POST,GET实例请求正文:添加请求实体即你具体要请求的内容用于POST请求,GET不用

HTTP响应报文格式

HTTP请求详解含POST,GET实例

HTTP状态码

HTTP请求详解含POST,GET实例 HTTP请求详解含POST,GET实例

HTTP响应头

HTTP请求详解含POST,GET实例 HTTP请求详解含POST,GET实例

HTTP请求详解含POST,GET实例 HTTP请求详解含POST,GET实例 解析

通过上述分析,我们可以发现HTTP请求其实像发送邮件一样,我们告诉邮局地址,邮局发送邮件,请求头是我们附加的一些信息,可以告诉收件人,谁发的邮件,谁可以看

,这是一封加密的邮件,你要根据什么规则把这封邮件翻译过来等等规则,请求内容当然就是我们要发送的具体内容,响应就是收件人给我的回信,响应头会告诉我们一些附加信息比如他告诉我们,你发送的那个收件人没有(404)或者我正确收到了你的来信(200),我给你的响应是什么加密方式,你要怎么解码,响应内容就是他要告诉我们的具体内容,你也可以把邮局当做一个代理,收件人当做服务器。

实战

接下来,我们根据以上规则使用JAVA来构造一些请求

POST不带请求实体请求方法

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class TestHttp{
   
   
    
    
    
    
    
 public void postOne(){
   
   
    
    
    
    
    
 HttpClient client = new DefaultHttpClient();  HttpResponse response = null;  String url = "http://write.blog.csdn.net/postedit";  HttpPost post = new HttpPost(url);  post.setHeader("Content-Type", "application/json");  response = client.execute(post);  String ret      = EntityUtils.toString(response.getEntity(),"UTF-8");  System.out.println(ret);
}
}

解析:

1,首先我们要构造一个客户端,apache对HttpClient这个类的解释是该接口仅表示HTTP请求执行的最基本合同,它不会对请求执行过程施加任何限制或具体细节,并且将状态管理,身份验证和重定向处理的细节留给个别实现。具体意思就是我们要发送HTTP请求就要先构造这个HTTPClient,但是涉及一些具体的细节比如cookies,header,request   body我们不需要用它来实现,这些具体的细节我们留给其他类来实现,
2,我们构造一个请求地址,即我们要把这个请求发送给谁
3,构建Post请求,HttpPost有一个构造器HttpPost(String uri) ,我们用这个构造器来初始化HttpPost
4,添加header,HttpPost里有一个setheader和addheader方法,这些方法是它继承接口org.apache.http.HttpMessage得来的,这里说一下add和set的区别,首先同名header
可以有多个,运行时使用第一个,当我们使用addheader时,如果同名header已经存在它会追加至原同名header后面,使用setheader时,他会覆盖同名的header,我在header
中设定了我要发送的请求体是json形式的(实际上并未携带请求体,携带请求体的会在下边给例子)
5,当我们构造好客户端,请求header,url地址后,此时就可以发送了,自然就是client.execute即执行这个请求
6,接下来是接受响应,即我们发送完邮件后,别人给我们回信了,我们要设法获得这个回信的内容即HttpResponse response = client.execute(post) 来关联我们的请求和响应,意思就是这个响应是我执行这个请求的响应getEntity是这个类自带的方法,用来获取响应实体,即具体的响应内容,它还有很多方法,获取响应信息,感兴趣可以自行研究
7,EntityUtils这个类主要是用来处理HttpEntity的,它有一些静态方法,我用的就是将这个响应实体以UTF-8的编码格式转换成字符串,最后打印出来

具体响应

Object moved

Object moved to here.

解析:
还有一些其他的内容,不在这里粘贴,返回的html代码是一个重新登录的地址链接,点击以后告诉我们重新登录,因为我访问的url是csdn的编辑页,不登录怎么可能直接访问呢,我们可以尝试使用cookie这里告诉大家一个进阶技巧,我们打开浏览器,启用开发者模式,然后重新登录一次,找到csdnbi这个接口,然后获取requestheader中的cookies
具体如图:

HTTP请求详解含POST,GET实例

HTTP请求详解含POST,GET实例在这里找到cookie后我们使用post.setheader("Cookie","*")就可越过登录,直接请求到这个页面了。感兴趣的可以试一下。

具体响应

   

编辑文章 - CSDN博客

       
             
      
   


       
                 
body里包含我的个人信息在这里就不给大家展示了

POST带请求参数和请求实体

前言:如果我们前边的都掌握了,那么接下来的就很容易理解了,我们知道post请求时会携带一些参数比如 http://www.123.com/index.html?a=123还有一些我们要发送的报文
其实参数和报文的处理方式是一样的,那么我们只要构造这个请求实体不就可以了吗?

		List
   
    
    
    
    
    
     
     
     
     
     
     nvps = new ArrayList
    
     
     
     
     
     
       (); nvps.add(new BasicNameValuePair("baowen","UTF-8")); post.setEntity(new UrlEncodedFormEntity(nvps,"UTF-8")); 
     
   
    
    
    
    
    

解析:

1,我们加入BasicNameValuePair,这个类是干嘛用的呢,apache的官方解释是用作HTTP消息元素的名称 – 值对参数。我们就用它来构造参数
2,我为什么用list,因为有时你的参数可能不止一个,这是它的一个构造器BasicNameValuePair(String name, String value) ,报文一定要是字符串格式,UrlEncodedForm
  Entity(List
parameters, String charset) 我要用这个类来构造实体就必须使用list来添加参数,同时这个类实际上是继承StringEntity,它又实现了
HttpEntity这个接口,知道这一点很重要。
3,public void setEntity(HttpEntity entity)这个方法要传入一个HttpEntity类型的参数,所以后边我可以直接用。


GET不带参数请求

 HttpGet get = new HttpGet(url);		get.setHeader("Content-Type", "application/json");		HttpResponse rese = client.execute(get);		String redsa = EntityUtils.toString(rese.getEntity());

GET携带参数请求


  CloseableHttpClient client3 = HttpClients.createDefault();		 List                             nvps2 = new ArrayList             (); nvps2.add(new BasicNameValuePair("baowen","213")); HttpResponse resep = null; URIBuilder builder = new URIBuilder(url); builder.setParameters(nvps2); HttpGet get21312 = new HttpGet(builder.build()); response = client.execute(get21312); String sdf = EntityUtils.toString(response.getEntity(),"UTF-8");           

注意

1,后边的代码我没有写完整,我们需要根据自己的需求添加URL
2,header里我用的都是json,大家可以根据自己需要什么类型做改变

3,我将返回都转换成了字符串,方便打印

4,我这里使用的是apache的http包,关于网络编程,JAVA也有自带的java.net包

总结


通过上边的学习我们明白,只要我们掌握了http请求由什么组成,哪些类来构造这些东西,然后在解析响应剩下的就对我们来说很简单了。万变不离其宗,这次我发这个总结主要是由于之前发的一遍http 发送 post请求 的贴访问量很高,感觉有必要指引一下新入坑的同学们,当然我自己也在学习之中,欢迎大家留言,咱们互相探讨,共同进步


















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227809.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:29
下一篇 2026年3月16日 下午8:29


相关推荐

  • CmakeList的编写和参数详解「建议收藏」

    CmakeList的编写和参数详解「建议收藏」CmakeList的编写和参数详解

    2025年5月25日
    5
  • python编程(Kivy 安装及使用教程)

    python编程(Kivy 安装及使用教程)Kivy 是一个很优秀的 基于 Python 的 GUI 库 可以利用 Python 快速编程的特点 快速的编写 windows linux mac android ios 等主流平台的应用程序 同 wxPython PyQt 相比 最大的优点是可以快速地编写移动应用程序 一 kivy 安装在 windows 命令行中 执行以下命令 python mpipinstalld

    2026年3月19日
    2
  • for循环与while循环的区别和联系

    for循环与while循环的区别和联系一 相同点 C C 中的 for 循环代码和 while 循环代码在 GCC 中生成的汇编代码在经过优化之后是相同的 即 两者在表达能力上是等价的 二 不同点 1 循环条件 for 循环的循环条件一般是循环变量 i j k while 循环的循环条件可以是循环变量 i j k 也可以是表达式 2 循环条件的设定位置 for 循环的循环变量可以在 for 循环的内部设定 在 for 循环结束之

    2026年3月17日
    2
  • WebStorm调试javaScript

    WebStorm调试javaScript目录 1 WebStorm 调试官方视频 2 Chrome 安装插件 JetBrainsIDE 设置 ip 地址和端口号 3 1 查看 WebStorm 的 Debugger 端口 3 2 设置 JetBrainsIDE WebStorm 测试 debug4 1 创建一个 index html4 2js 调试 1 WebStorm 调试官方视频

    2026年3月20日
    2
  • ipsec iptables_iptables -p

    ipsec iptables_iptables -piptablesiptables[-t表名]命令选项[链名][条件匹配][-j目标动作或跳转]-t表名可以省略,指定规则存放在哪个表中,默认为filter表用于存放相同功能的规则filter表:负责过滤功能能,nat表:网络地址转换功能mangle表:拆解报文做出修改并重新封装的功能raw表:关闭nat表上启用的连接追踪机制命令选项-A在…

    2022年10月7日
    5
  • matlab做kmo检验的代码,进行kmo和Bartlett球形检验因子分析的SAS程序是什么呢,谢谢!…

    matlab做kmo检验的代码,进行kmo和Bartlett球形检验因子分析的SAS程序是什么呢,谢谢!…Anexcerptfromasampleoutputappearsbelow.InitialFactorMethod:MaximumLikelihoodSignificanceTestsBasedon19ObservationsPr>TestDFChi-SquareChiSqH0:Nocommo…

    2022年6月26日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号