get请求_get请求实例 - CSDN
精华内容
参与话题
  • Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就...
  • package com.example.day01_http03; import android.annotation.SuppressLint; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bund...
    package com.example.day01_http03;
    
    import android.annotation.SuppressLint;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class MainActivity extends AppCompatActivity {
    
        private EditText editText;
        private Button button;
        private TextView textView;
        private final int UPDATE_UI = 1;
        @SuppressLint("HandlerLeak")
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case UPDATE_UI:
                        textView.setText(msg.obj.toString());
                        break;
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获取资源id
            editText = findViewById(R.id.ed_name);
            button = findViewById(R.id.btn);
            textView = findViewById(R.id.text);
            //点击
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Thread(
                            new Runnable() {
                                @Override
                                public void run() {
                                    //获取输入框的值你
                                    String s = editText.getText().toString();
                                    query(s);
                                }
                            }
                    ).start();
                }
            });
        }
    
        private String baseUrl = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=";
    
        private void query(String s) {
    
            try {
                //定义url地址
                URL url = new URL(baseUrl + s);
                //打开连接
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                //设置请求方式
                urlConnection.setRequestMethod("GET");
                //读取超时
                urlConnection.setReadTimeout(5000);
                //连接超时
                urlConnection.setConnectTimeout(5000);
                //获取连接状态
                int responseCode = urlConnection.getResponseCode();
                if (responseCode == 200) {
                    //将字节流转换为字符流
                    String s1 = stream1(urlConnection.getInputStream());
                    //创建一个message
                    Message message = handler.obtainMessage(UPDATE_UI, s1);
                    //发送message
                    handler.sendMessage(message);
                } else {
                    Message message = handler.obtainMessage(UPDATE_UI, "error:" + responseCode);
                    handler.sendMessage(message);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private String stream1(InputStream is) throws IOException {
            //将字节流转换为字符流
            InputStreamReader isr = new InputStreamReader(is, "gbk");
            //字符缓冲流
            BufferedReader br = new BufferedReader(isr);
            //创建stringbullder
            StringBuilder builder = new StringBuilder();
            //循环读取 将读取出来的值存入builder
            for (String t = br.readLine(); t != null; t = br.readLine()) {
                builder.append(t);
            }
            return builder.toString();
        }
    
    
    }
    
    
    展开全文
  • get,post请求方式详解

    千次阅读 2018-11-26 11:01:50
    前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解。 在网上摘到一段比较有用的话 减低服务器流量压力 根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的...

    本文转自:http://blog.csdn.net/findsafety/article/details/47129021

    前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解。

    在网上摘到一段比较有用的话

    减低服务器流量压力
    根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)

    还不是很明白,下午我们探讨一下Http中get post的本质区别

    一 原理区别

    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交
    

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE

    URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息(个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异)。

    根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

    1.所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

    * 注意:这里安全的含义仅仅是指是非修改信息。

    2.幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等这个概念:

    幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。
    幂等有以下几种定义:
    对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。 比如绝对值运算就是一个例子,在实数集中,有abs(a) = abs(abs(a)) 。
    对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在实数集中幂等,即max(x,x) = x 。
    看完上述解释后,应该可以理解GET幂等的含义了。

    但在实际应用中,以上2条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。

    根据HTTP规范,POST表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。

    上面大概说了一下HTTP规范中,GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:

    1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。

    2.对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。

    3.另外一个是,早期的但是Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计。还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。

    * 简单解释一下MVC:MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

    以上3点典型地描述了老一套的风格(没有严格遵守HTTP规范),随着架构的发展,现在出现REST(Representational StateTransfer),一套支持HTTP规范的新风格,这里不多说了,可以参考《RESTful Web Services》。

    二 表现形式区别

    搞清了两者的原理区别,我们再来看一下他们实际应用中的区别:

    为了理解两者在传输过程中的不同,我们先看一下HTTP协议的格式:
    
    HTTP请求:
    

    //http请求行

    //http请求消息报头

    //回车换行

    [] //http请求正文

    在HTTP请求中,第一行必须是一个请求行(requestline),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

    GET与POST方法实例:
    GET /books/?sex=man&name=Professional HTTP/1.1
    Host: www.wrox.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection: Keep-Alive

    POST / HTTP/1.1
    Host: www.wrox.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 40
    Connection: Keep-Alive
    (----此处空一行----)
    name=Professional%20Ajax&publisher=Wiley

    有了以上对HTTP请求的了解和示例,我们再来看两种提交方式的区别:

    (1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据

     因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
    

    (2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

    而在实际开发中存在的限制主要有:

    GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。

    因此对于GET提交时,传输数据就会受到URL长度的 限制。

    POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

    (3)安全性:

    POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修 改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-siterequest forgery攻击

    (4)Http get,post,soap协议都是在http上运行的
    1)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的
    查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全
    2)post:请求参数是在http标题的一个不同部分(名为entitybody)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。
    但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
    3)soap:是http post的一个专用版本,遵循一种特殊的xml消息格式
    Content-type设置为: text/xml 任何数据都可以xml化

    三 HTTP响应
    1.HTTP响应格式:

    //http响应状态行
    //http响应消息报头
    //回车换行
    [] //http响应正文

    在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

    HTTP响应实例:

    HTTP/1.1 200 OK
    Date: Sat, 31 Dec 2005 23:59:59 GMT
    Content-Type: text/html;charset=ISO-8859-1Content-Length: 122

    <html>
    <head>
    <title>Wrox Homepage</title>
    </head>
    <body>
    <!-- body goes here -->
    </body>
    </html>
    2.最常用的状态码有:

    ◆200 (OK): 找到了该资源,并且一切正常。
    ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
    ◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
    ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。

    四 完整示例:

    例子:

    HTTP GET

    发送

    GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1
    Host: api.efxnow.com

    回复

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?> boolean string int long string string

    HTTP POST

    发送

    POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
    Host: api.efxnow.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: length

    UserID=string&PWD=string&OrderConfirmation=string

    回复

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?> boolean string int long string string

    SOAP 1.2

    发送

    POST /DEMOWebServices2.8/Service.asmx HTTP/1.1
    Host: api.efxnow.com
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?>

    soap12:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”
    soap12:Body

    string
    string
    string

    </soap12:Body>
    </soap12:Envelope>

    回复

    HTTP/1.1 200 OK
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?>

    soap12:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”
    soap12:Body


    boolean
    string
    int
    long
    string
    string


    </soap12:Body>
    </soap12:Envelope>

    1. get是从服务器上获取数据,post是向服务器传送数据。
      get 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别,http协议里面有介绍
      2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
      因为get设计成传输小数据,而且最好是不修改服务器的数据,所以浏览器一般都在地址栏里面可以看到,但post一般都用来传递大数据,或比较隐私的数据,所以在地址栏看不到,能不能看到不是协议规定,是浏览器规定的。
    2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
      没明白,怎么获得变量和你的服务器有关,和get或post无关,服务器都对这些请求做了封装
    3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
      post基本没有限制,我想大家都上传过文件,都是用post方式的。只不过要修改form里面的那个type参数
    4. get安全性非常低,post安全性较高。
      如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到,不信你自己下一个监听网络资源的软件,

    原文链接:https://www.cnblogs.com/XJJD/p/7674007.html

    展开全文
  • GET请求

    2016-10-10 14:39:28
    发出Get请求 得到返回请求 获得url输入流 补充设置URLURL obj = new URL("https://www.baidu.com"); 创建链接HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 设置参数con.setRequestProperty(...

    设置URL

    URL obj = new URL("https://www.baidu.com");
    

    创建链接

    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    

    设置参数

    con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");
    con.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8");
    

    发出Get请求

    con.setRequestMethod("GET");
    

    得到返回请求

    int responseCode = con.getResponseCode();
    

    获得url输入流

    String responseBody = readResponseBody(con.getInputStream());//这是一个函数   
    
    System.out.println(con.getInputStream());
    System.out.println(con.getResponseMessage());
    System.out.println(responseCode);
    System.out.println(con.getContent());
    System.out.println(responseBody);
    

    补充

    private static String readResponseBody(InputStream inputStream) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
        String inputLine;
        StringBuffer response =new StringBuffer();
    
        while((inputLine = in.readLine()) != null){
            response.append(inputLine);
        }
        in.close();
        return response.toString();
    }
    
    展开全文
  • HTTP请求详解含POST,GET实例

    万次阅读 多人点赞 2018-05-05 21:45:55
    HTTP的组成http消息由客户端到服务端的请求以及服务端到客户端的响应组成HTTP请求报文的格式请求头与请求正文中间有一行空行,是告诉服务器请求头到此结束了接下来是请求正文请求方法:get,post,head,delete等等,...

    前言

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

    HTTP的组成

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

    HTTP请求报文的格式

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

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

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

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

    HTTP响应报文格式


    HTTP状态码


    HTTP响应头


    解析

    通过上述分析,我们可以发现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的编码格式转换成字符串,最后打印出来

    具体响应

    <html><head><title>Object moved</title></head><body><h2>Object moved to <a href="https://passport.csdn.net/account/login?from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit">here</a>.</h2></body></html>
    解析:
    还有一些其他的内容,不在这里粘贴,返回的html代码是一个重新登录的地址链接,点击以后告诉我们重新登录,因为我访问的url是csdn的编辑页,不登录怎么可能直接访问呢,我们可以尝试使用cookie这里告诉大家一个进阶技巧,我们打开浏览器,启用开发者模式,然后重新登录一次,找到csdnbi这个接口,然后获取requestheader中的cookies
    具体如图:

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

    具体响应

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <script type="text/javascript" src="//static-blog.csdn.net/scripts/tingyun-rum.js"></script><title>编辑文章 - CSDN博客</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <link type="text/css" rel="Stylesheet" href="http://c.csdnimg.cn/pig/blog/write/css/main.css" />    <!--new top-->        <link rel="stylesheet" href="http://c.csdnimg.cn/public/common/toolbar/css/index.css">     <!--new top-->       <script type="text/javascript" src="//static-blog.csdn.net/scripts/jquery.js"></script>    <script type="text/javascript" src="//static-blog.csdn.net/scripts/jquery-version.js"></script><script type="text/javascript" src="//static-blog.csdn.net/scripts/csdn.js"></script><script type="text/javascript" src="http://c.csdnimg.cn/pig/blog/write/scripts/master.js"></script>        <script type="text/javascript">var statichost = "//static-blog.csdn.net";</script>               <link type='text/css' rel='Stylesheet' href='http://c.csdnimg.cn/pig/blog/write/css/write.css' /><script type='text/javascript' src='http://c.csdnimg.cn/pig/blog/write/scripts/jquery.autocomplete.min.js'></script> <script type='text/javascript' src='//static-blog.csdn.net/xheditor/xheditor-1.1.13-zh-cn.js'></script><link type='text/css' rel='Stylesheet' href='http://c.csdnimg.cn/pig/blog/write/css/jquery.autocomplete.css' /></head><body></body></html>
    body里包含我的个人信息在这里就不给大家展示了

    POST带请求参数和请求实体

    前言:如果我们前边的都掌握了,那么接下来的就很容易理解了,我们知道post请求时会携带一些参数比如 http://www.123.com/index.html?a=123还有一些我们要发送的报文
    其实参数和报文的处理方式是一样的,那么我们只要构造这个请求实体不就可以了吗?
    		List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
    		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<? extends NameValuePair> 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<NameValuePair> nvps2 = new ArrayList<NameValuePair>();
    		 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请求 的贴访问量很高,感觉有必要指引一下新入坑的同学们,当然我自己也在学习之中,欢迎大家留言,咱们互相探讨,共同进步












    展开全文
  • HTTP-简单处理get请求

    2019-10-26 19:03:34
    // 引用系统模块 const http=require('http') //用于处理url地址 const url=require('url') //创建web服务器 const app=http.createServer() ... // 获取请求报文信息 headers是以对象的形式存储 想要获得...
  • get请求和post请求的详细区别

    万次阅读 多人点赞 2020-03-31 23:11:11
    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者...
  • 两种 HTTP 请求方法:GET 和 POST

    万次阅读 2016-10-24 11:16:39
    两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。POST - 向指定的资源提交要被处理的数据   GET POST ...
  • HTTP请求方式GET

    2019-02-23 11:15:47
    Get请求方式 http://api.map.baidu.com/telematics/v3/weather?location=%E5%98%89%E5%85%B4&amp;output=json&amp;ak=5slgyqGDENN7Sy7pw29IUvrZ 格式:URL=URL+?key=value&amp;key=value................
  • HTTP中的GET请求

    千次阅读 2020-06-05 21:30:55
    HTTP中的GET请求可以理解成我们经常所说的“增删改查”中的“查”。请求的常见形式,一般是在请求URL后面以?的形式加上要发给服务器的参数,多个参数之间用&隔开,比如: ...
  • HTTPget_post请求方法

    千次阅读 2016-07-26 17:03:34
    HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结 时间:2015-03-20 16:00:51 阅读:8484 评论:0 收藏:1 [点我收藏+] 标签:  HTTP请求报文:   一个HTTP请求报文由四个部分组成:请求行、请求...
  • 使用web api 开发接口时遇到 请求的资源不支持 http 方法“GET” 的问题: 因为引用了using System.Web.Mvc ,改为 using System.Web.Http; 或给方法名加get前缀,如getCancelOrder
  • HTTP协议中,GET请求和POST请求的区别

    万次阅读 2018-08-03 16:33:57
    HTTP请求概述: HTTP协议称为超文本传输协议,它设计的目的是保证客户机与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求——应答协议。在客户端和服务器之间进行请求和响应时,有两种基本的请求方式...
  • HTTP请求中POST与GET的区别

    万次阅读 多人点赞 2014-04-18 17:31:48
    一、原理区别 ...HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET
  • http GET请求方式传递数组参数

    万次阅读 2019-03-10 14:24:21
    异常:java.lang.IllegalArgumentException: Invalid character found in the request target.The valid characters are defined in ...原因:get请求方式传参时,需要传递数组参数,http://localhost:8080/test?st...
  • http get请求和post请求的格式区别

    万次阅读 2017-12-19 21:26:25
    写了一个cgi, 支持get请求, 在fiddler中重放get请求, 一切正常, 参数格式如下: GET /cgi-bin/my_cgi?uin=12345&appID=20&content=xxx HTTP/1.1 Host: x.y.z.com  现在要支持post请求, 如果想当然地改成 POST...
  • 最近看Elasticsearch: The Definitive Guide这本书的时候,有些时候发现使用curl的时候,在GET请求中加了-d参数,因为很少见到GET请求请求体中带参数,一般情况下都是在URL里面的,所以好奇特地用wireshark抓了...
  • JS发送http请求(get方式)

    万次阅读 2018-09-14 13:00:01
    http://192.168.2.234:8080/GS1014J_MCF/forumServer?" + "queryMode=byId&amp;forumId=297e254c60114cd301601186c0740009"; var time = 1000; var timeout = false; var request = new ...
  • restTemplate发送get请求携带header

    万次阅读 2019-06-13 15:15:06
    restTemplate发送POST请求时可以通过restTemplate.postForObject...方式请求,但是GET却没有相应的方法,但是可以使用exchange替代,代码如下: HttpHeaders headers = new HttpHeaders(); headers.add("token",t...
  • 关于Http Get请求是否可携带Body

    万次阅读 2019-02-01 10:04:39
    Apache Http Client 和 OkHttpClient 都不支持 GET 请求发送 Body 数据,而 AsyncHttpClient 是可以的。 那么回过头来想想为什么 HTTP 并未规定不可以 GET 中发送 Body 内容,但却不少知名的工具不能用 GET 发送 ...
1 2 3 4 5 ... 20
收藏数 2,373,782
精华内容 949,512
关键字:

get请求