zoukankan      html  css  js  c++  java
  • HttpClient服务端发送http请求

    本来以为对跨域问题的处理已经比较熟练了。可以通过jsonp、document.domain+iframe、window.name、window.postMessage、服务器上设置代理页面来解决。但还是遇到了难题dva封装的request:

    1.robe-ajax用它来调其他网站的api,会报跨域问题怎么设置也没用。

    2.fetch可以通过设置mode:no-cors来解决跨域,但到checkStatus时会报错,network能看到response。

    3.jq ajax设置dataType:jsonp,jsonp:callback解决跨域,但由于是异步,与yield冲突无法在success回调时调用yield put修改state。

    最后还是决定在服务端调api,因为跨域的安全限制都是指浏览器端来说的,服务器端是不存在跨域安全限制的,所以通过服务器端httpclient方式完成“跨域访问”,然后在浏览器端用dva的request来间接完成跨域访问也是可以的。

    越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

    // 根据地址获取请求

    HttpGet request = new HttpGet(url);// get请求

    // 获取当前客户端对象

    HttpClient httpClient = new DefaultHttpClient();

    // 通过请求对象获取响应对象

    HttpResponse response = httpClient.execute(request);

    // 判断网络连接状态码是否正常(0--200都数正常)

    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

    result=EntityUtils.toString(response.getEntity(),"utf-8"); }

    • Apache也有一个发送post请求的方法:
    String url="http://XXX..";
    //POST的URL
    HttpPost httppost=new HttpPost(url);
    //建立HttpPost对象
    List<NameValuePair> params=new ArrayList<NameValuePair>();
    //建立一个NameValuePair数组,用于存储欲传送的参数
    params.add(new BasicNameValuePair("pwd","2544"));
    //添加参数
    httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
    //设置编码
    HttpResponse response=new DefaultHttpClient().execute(httppost);
    //发送Post,并返回一个HttpResponse对象
    if(response.getStatusLine().getStatusCode()==200){//如果状态码为200,就是正常返回
    String result=EntityUtils.toString(response.getEntity());
    • Apache Client的get post方法发送请求在java中其实已经有内置了,只不过代码稍复杂了一些

    比如发送get请求:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    
    public class HttpRequest {
        /**
         * 向指定URL发送GET方法的请求
         * 
         * @param url
         *            发送请求的URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return URL 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.out.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(
                        connection.getInputStream(),"utf-8"));//防止乱码
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return result;
        }
  • 相关阅读:
    CSS 使用技巧
    CSS display
    CSS float
    .NET自动识别HttpWebResponse的编码及是否压缩
    通用权限管理系统基类中数据库的连接
    通用权限底层实现的记录软删除及表中应包含的基本字段
    最好用的兼容多种数据库通用高效的大数据分页功能
    水平权限漏洞的修复方案
    通用权限管理系统菜单展示的一个技巧
    IE11下用forms身份验证的问题
  • 原文地址:https://www.cnblogs.com/cosyer/p/6715113.html
Copyright © 2011-2022 走看看