Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Commit

Permalink
HttpMethodType增加Put fix #31
Browse files Browse the repository at this point in the history
HttpResponse.headerList 属性改成 map 结构比较合适 fix #33

重命名 HttpUriRequestFactory.buildHttpUriRequest(HttpRequest,
ConnectionConfig) 方法 为create fix #30

删除 HttpHeaderListBuilder fix #34

新增 HttpPutBuilder fix #35
  • Loading branch information
venusdrogon committed Aug 1, 2018
1 parent 1b68937 commit 8773519
Show file tree
Hide file tree
Showing 24 changed files with 587 additions and 98 deletions.
79 changes: 75 additions & 4 deletions feilong-net-api/src/main/java/com/feilong/net/HttpMethodType.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.feilong.core.lang.EnumUtil;

/**
* http请求方法,目前仅支持通用的get和post 其他不支持.
* http请求方法.
*
* <h3>get && post区别:</h3>
*
Expand Down Expand Up @@ -126,11 +126,82 @@
*/
public enum HttpMethodType{

/** get方式. */
/**
* get方式.
*
* @since http0.9
*/
GET("get"),

/** post方式. */
POST("post");
/**
* post方式.
*
* @since http1.0
*/
POST("post"),

//---------------------------------------------------------------

/**
* put方式.
*
* <p>
* The PUT method requests that the enclosed entity be stored under the supplied Request-URI. <br>
* If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one
* residing on the origin server.
* </p>
*
* <p>
* PUT方法请求服务器去把请求里的实体存储在请求URI(Request-URI)标识下。
* </p>
*
* <ul>
* <li>如果请求URI(Request-URI)指定的的资源已经在源服务器上存在,那么此请求里的实体应该被当作是源服务器此URI所指定资源实体的修改版本</li>
* <li>如果请求URI(Request-URI)指定的资源不存在,并且此URI被用户代理(user agent,译注:用户代理可认为是客户浏览器)定义为一个新资源,那么源服务器就应该根据请求里的实体创建一个此URI所标识下的资源。</li>
* <li>如果一个新的资源被创建了,源服务器必须能向用户代理(user agent)发送201(已创建)响应。</li>
* <li>如果已存在的资源被改变了,那么源服务器应该发送200(Ok)或者204(无内容)响应。</li>
* <li>如果资源不能根据请求URI创建或者改变,一个合适的错误响应应该给出以反应问题的性质</li>
* <li>实体的接收者不能忽略任何它不理解的Content-*(如:Content-Range)头域,并且必须返回501(没有被实现)响应</li>
* </ul>
*
* <p>
* 如果请求穿过一个缓存(cache),并且此请求URI(Request-URI)指示了一个或多个当前缓存的实体,那么这些实体应该被看作是旧的。<span style="color:red">PUT方法的响应不应该被缓存</span>。
* </p>
*
* <h3>POST方法和PUT方法请求最根本的区别:</h3>
*
* <blockquote>
* <p>
* POST方法和PUT方法请求最根本的区别:<span style="color:green">请求URI(Request-URI)的含义不同</span>。
* </p>
*
* <p>
* POST请求里的URI指示一个能处理请求实体的资源(译注:此资源可能是一段程序,如jsp里的servlet)<br>
* 此资源可能是一个数据接收过程,一个网关(gateway,译注:网关和代理服务器的区别是:网关可以进行协议转换,而代理服务器不能,只是起代理的作用,比如缓存服务器其实就是一个代理服务器),或者一个单独接收注释的实体。<br>
* 而PUT方法请求里有一个实体一一用户代理知道URI意指什么,并且服务器不能把此请求应用于其他URI指定的资源。<br>
* 如果服务器期望请求被应用于一个不同的URI,那么它必须发送301(永久移动了)响应;用户代理可以自己决定是否重定向请求。
* 一个独立的资源可能会被许多不同的URI指定。<br>
*
* 如:一篇文章可能会有一个URI指定当前版本,此URI区别于其文章其他特殊版本的URI。<br>
* 这种情况下,一个通用URI的PUT请求可能会导致其资源的其他URI被源服务器定义。
*
* </p>
*
* </blockquote>
*
* <h3>说明:</h3>
* <blockquote>
* <ol>
* <li>HTTP/1.1没有定义PUT方法对源服务器的状态影响</li>
* <li>PUT请求必须遵循8.2节中的消息传输要求</li>
* <li>除非特别指出,PUT方法请求里的实体头域应该被用于资源的创建或修改</li>
* </ol>
* </blockquote>
*
* @since 1.12.5
* @since http1.1
*/
PUT("put");

//---------------------------------------------------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
package com.feilong.net.entity;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
* 得到的 http response 结果信息.
Expand All @@ -27,21 +27,25 @@
public class HttpResponse implements Serializable{

/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1116415641000552013L;
private static final long serialVersionUID = 1116415641000552013L;

//---------------------------------------------------------------

/** 响应的状态码,比如 200 , 404. */
private int statusCode;
private int statusCode;

/** 响应的结果字符串. */
private String resultString;
private String resultString;

/** 响应头信息. */
private List<HttpHeader> headerList;
/**
* 响应头信息.
*
* @since 1.12.5 change to map
*/
private Map<String, String> headerMap;

/** 耗时时间,精确到<span style="color:red">毫秒</span>. */
private long useTime;
private long useTime;

//---------------------------------------------------------------

Expand Down Expand Up @@ -105,20 +109,21 @@ public void setResultString(String resultString){
/**
* 获得 响应头信息.
*
* @return the headerList
* @return the headerMap
* @since 1.12.5
*/
public List<HttpHeader> getHeaderList(){
return headerList;
public Map<String, String> getHeaderMap(){
return headerMap;
}

/**
* 设置 响应头信息.
*
* @param headerList
* the headerList to set
* @param headerMap
* the headerMap to set
* @since 1.12.5
*/
public void setHeaderList(List<HttpHeader> headerList){
this.headerList = headerList;
public void setHeaderMap(Map<String, String> headerMap){
this.headerMap = headerMap;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ public static String get(String uri){
}

/**
* 发送post请求,获得请求的响应内容.
* 发送 get 请求,获得请求的响应内容.
*
* <h3>示例:</h3>
*
Expand All @@ -558,7 +558,63 @@ public static String get(String uri){
* public void testGetResponseBodyAsString(){
* String urlString = "http://www.baidu.com";
*
* LOGGER.debug(HttpClientUtil.post(urlString));
* LOGGER.debug(HttpClientUtil.get(urlString, null));
* }
*
* </pre>
*
* <b>返回:</b>
*
* <pre>
* {@code
* <!DOCTYPE html>
* <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=
X-UA-Compatible content=
* IE=Edge><meta content=always name=
* referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link
* =#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div id=
* u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id
* =ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=
* cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
*
* }
* </pre>
*
* </blockquote>
*
* @param uri
* 请求的uri地址
* @param requestParamMap
* the request param map
* @return 如果 <code>uri</code> 是null,抛出 {@link NullPointerException}<br>
* 如果 <code>uri</code> 是blank,抛出 {@link IllegalArgumentException}<br>
* @since 1.10.7
*/
public static String get(String uri,Map<String, String> requestParamMap){
Validate.notBlank(uri, "uri can't be blank!");

return getResponseBodyAsString(new HttpRequest(uri, requestParamMap, HttpMethodType.GET));
}

//---------------------------------------------------------------

/**
* 发送put请求,获得请求的响应内容.
*
* <h3>示例:</h3>
*
* <blockquote>
*
* <p>
* <b>场景:</b> 发信息给百度,并得到相应字符串
* </p>
*
* <pre class="code">
*
* public void testGetResponseBodyAsString(){
* String urlString = "http://www.baidu.com";
*
* LOGGER.debug(HttpClientUtil.put(urlString));
* }
*
* </pre>
Expand All @@ -585,14 +641,14 @@ public static String get(String uri){
* 请求的uri地址
* @return 如果 <code>uri</code> 是null,抛出 {@link NullPointerException}<br>
* 如果 <code>uri</code> 是blank,抛出 {@link IllegalArgumentException}<br>
* @since 1.10.7
* @since 1.12.5
*/
public static String post(String uri){
return post(uri, (Map<String, String>) null);
public static String put(String uri){
return put(uri, null);
}

/**
* 发送 get 请求,获得请求的响应内容.
* 发送 put 请求,获得请求的响应内容.
*
* <h3>示例:</h3>
*
Expand All @@ -607,7 +663,7 @@ public static String post(String uri){
* public void testGetResponseBodyAsString(){
* String urlString = "http://www.baidu.com";
*
* LOGGER.debug(HttpClientUtil.get(urlString, null));
* LOGGER.debug(HttpClientUtil.put(urlString, null));
* }
*
* </pre>
Expand Down Expand Up @@ -637,12 +693,62 @@ public static String post(String uri){
* the request param map
* @return 如果 <code>uri</code> 是null,抛出 {@link NullPointerException}<br>
* 如果 <code>uri</code> 是blank,抛出 {@link IllegalArgumentException}<br>
* @since 1.10.7
* @since 1.12.5
*/
public static String get(String uri,Map<String, String> requestParamMap){
public static String put(String uri,Map<String, String> requestParamMap){
Validate.notBlank(uri, "uri can't be blank!");
return getResponseBodyAsString(new HttpRequest(uri, requestParamMap, HttpMethodType.PUT));
}

return getResponseBodyAsString(new HttpRequest(uri, requestParamMap, HttpMethodType.GET));
//---------------------------------------------------------------

/**
* 发送post请求,获得请求的响应内容.
*
* <h3>示例:</h3>
*
* <blockquote>
*
* <p>
* <b>场景:</b> 发信息给百度,并得到相应字符串
* </p>
*
* <pre class="code">
*
* public void testGetResponseBodyAsString(){
* String urlString = "http://www.baidu.com";
*
* LOGGER.debug(HttpClientUtil.post(urlString));
* }
*
* </pre>
*
* <b>返回:</b>
*
* <pre>
{@code
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=
IE=Edge><meta content=always name=
referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link
=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div id=
u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id
=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=
cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
}
* </pre>
*
* </blockquote>
*
* @param uri
* 请求的uri地址
* @return 如果 <code>uri</code> 是null,抛出 {@link NullPointerException}<br>
* 如果 <code>uri</code> 是blank,抛出 {@link IllegalArgumentException}<br>
* @since 1.10.7
*/
public static String post(String uri){
return post(uri, (Map<String, String>) null);
}

/**
Expand Down
Loading

0 comments on commit 8773519

Please sign in to comment.