RestTemplate发送请求并携带header信息

1、使用restTemplate的postForObject方法

  注:目前没有发现发送携带header信息的getForObject方法。

HttpHeaders headers = new HttpHeaders();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
  String key = (String) headerNames.nextElement();
  String value = request.getHeader(key);
  headers.add(key, value);
}
String restStrResult = restTemplate.postForObject(url, /*携带header*/new HttpEntity<String>(headers), String.class,             /*携带parameter*/request.getParameterMap());

2、使用restTemplate

import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class RestTemplateUtil {

    private RestTemplate restTemplate;

    public void setRestTemplate(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String post(ServletRequest req, String url, Map<String, ?> params) {
        ResponseEntity<String> rss = request(req, url, HttpMethod.POST, params);
        return rss.getBody();
    }

    public String get(ServletRequest req, String url, Map<String, ?> params) {
        ResponseEntity<String> rss = request(req, url, HttpMethod.GET, params);
        return rss.getBody();
    }

    public String delete(ServletRequest req, String url, Map<String, ?> params) {
        ResponseEntity<String> rss = request(req, url, HttpMethod.DELETE, params);
        return rss.getBody();
    }

    public String put(ServletRequest req, String url, Map<String, ?> params) {
        ResponseEntity<String> rss = request(req, url, HttpMethod.PUT, params);
        return rss.getBody();
    }

    /**
     * @param req
     * @param url
     * @param method
     * @param params maybe null
     * @return
     */
    private ResponseEntity<String> request(ServletRequest req, String url, HttpMethod method, Map<String, ?> params) {
        HttpServletRequest request = (HttpServletRequest) req;
        //获取header信息
        HttpHeaders requestHeaders = new HttpHeaders();
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
          String key = (String) headerNames.nextElement();
          String value = request.getHeader(key);
          requestHeaders.add(key, value);
        }
        //获取parameter信息
        if(params == null) {
            params = request.getParameterMap();
        }

        HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
        ResponseEntity<String> rss = restTemplate.exchange(url, method, requestEntity, String.class, params);
        return rss;
    }
}
时间: 2024-10-19 13:02:47

RestTemplate发送请求并携带header信息的相关文章

.NET发送请求,携带json数据

/// <summary> /// 发送请求 /// </summary> /// <param name="Uri">请求地址</param> /// <param name="JsonStr">json数据</param> /// <returns></returns> public static string ClientRequest(string Uri, st

curl发送请求时携带cookie-转载未验证

1 <?php 2 header('Content-Type:text/html;charset=utf-8'); 3 echo "<pre>"; 4 5 function curl($cookie,$user_agent,$destURL, $paramStr='',$flag='get',$ip='10.57.22.151',$fromurl='http://www.baidu.com'){ 6 $curl = curl_init(); 7 if($flag=='

RestTemplate工具类根据服务名发送请求

要使用RestTemplate 根据服务名发送请求的话需要 使用  @LoadBalanced  这个注解,用了这个注解的RestTemplate就不用使用  ip 来请求了,首先要创建一个配置类 import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.conte

Java爬虫(一)利用GET和POST发送请求,获取服务器返回信息

本人所使用软件 eclipse fiddle UC浏览器 分析请求信息 以知乎(https://www.zhihu.com)为例,模拟登陆请求,获取登陆后首页,首先就是分析请求信息. 用UC浏览器F12,点击Network,按F5刷新.使用自己账号登陆知乎后,点www.zhihu.com网址后,出现以下界面  在General中,看到请求方式是GET,在fiddle里请求构造中,方法选定GET. 下拉后,看到Request Header,将里面所有的内容复制下来,粘贴到fiddle的请求构造里 

【转帖】客户端通过 HTTP 请求和响应 的 Header 信息总结

请求Header原帖地址:http://technique-digest.iteye.com/blog/1174581 响应Header原帖地址:http://blog.pfan.cn/hurongliang/24720.html 客户端HTTP请求的Header信息 1.HTTP请求方式 如下表: 方 法 描 述 GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEAD 检查一个对象是否存在 D

后台发送请求,HttpClient的post,get各种请求,带header的请求

HttpClient依赖jar包: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> 写一个发送请求的工具类HttpUtil package com.bs.utils; import java.io

页面发送请求到后台报错“Empty or invalid anti forgery header token.”问题解决

在页面向后台发送请求时,报如上图的错误的解决办法: 在WebModule.cs类中的PreInitialize方法中加 Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false; 另外还有添加引用: using Abp.Configuration.Startup; 出现这个问题的原因是没有使用abp.ajax的请求方式,而是使用其他的方式 另外还有其他的解决办法: 1.在Controller的Action里标注:[DisableAb

使用RestTemplate发送post请求

最近使用RestTemplate发送post请求,遇到了很多问题,如转换httpMessage失败.中文乱码等,调了好久才找到下面较为简便的方法: RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); head

使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据

接口文档: 换头像 接口 user/change_avatar 发送数据 HTTP Post body(一共2对KEY-VALUE): json={"uid":"1","sid":"0123456789ABCDEF0123456789ABCDEF","ver":"1","request":{}} file=图片二进制文件数据 返回数据 {"ret"