⑴ java 怎麼手動編寫http請求頭
實現宏乎思路就是先定義請求頭內容,之後進行請求頭設置。
定義請求頭
LinkedHashMap<String,String> headers = new LinkedHashMap<鬧轎String,String>();
headers.put("Content-type","text/xml");
headers.put("Cache-Control", "no-cache");
headers.put("Connection", "close");
給HttpPost 設置請求頭蔽彎悉
HttpPost httpPost = new HttpPost("http://localhost:8080/root");
if (headers != null) {
for (String key : headers.keySet()) {
httpPost.setHeader(key, headers.get(key));
}
}
備註:只需要在map中設置相應的請求頭內容即可。根據實際需要修改即可
⑵ 如何使用java多線程處理http請求,求思路
您好,提問者: 1、先說長連接吧,如果TCP協跡譽念議的話長連接可以通過心跳包來實虛賀現。 2、推送的話,這個可以姿困弄一個定時器,來控制線程,推送發送完畢,線程stop()。
⑶ 求教java中怎麼實現http的patch方法的請求
請參考:
HttpResponse response = null;
BufferedReader rd = null;
StringBuffer result = new StringBuffer();
String line = "";
HttpClient httpclient = HttpClients.createDefault();
HttpPatch httpPatch = new HttpPatch("http://myURL");
JsonArrayBuilder Abuilder = Json.createArrayBuilder();
JsonObjectBuilder oBuilder = Json.createObjectBuilder();
for(int i=0;i<48;i++){
Abuilder.add(i+1);
}
oBuilder.add("date", "2016-09-08");
oBuilder.add("values",Abuilder);
JsonObject jo = Json.createObjectBuilder().add("puissance", Json.createObjectBuilder().add("curves",Json.createArrayBuilder().add(oBuilder))).build();
try{
StringEntity params =new StringEntity(jo.toString());
params.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPatch.setEntity(params);
response = httpclient.execute(httpPatch);
System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
while ((line = rd.readLine()) != null) {
System.out.println(line);
result.append(line);
}
}catch(Exception e){
}
⑷ 怎樣用JAVA實現模擬HTTP請求,得到伺服器的響應時間等參數
使用httpconnection方法連接,前後記錄系統時間並相減,得到響應時間,伺服器參數可以用過response返回或者保存在session中。
⑸ Java實現攔截HTTP請求的幾種方式
在Java的服務端開發當中,攔截器是很常見的業務場景,這里對Java開發當中幾種常見的攔截器的實現方式進行記錄和分析。案例說明基於Spring Boot環境。
一:實現javax.servlet.Filter介面(使用過濾器方式攔截請求)
import org.springframework.stereotype.Component;import javax.servlet.*;import java.io.IOException;import java.util.Date;@Componentpublic class TimeInterceptor implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("time filter init");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("time filter start");long start = new Date().getTime();filterChain.doFilter(servletRequest, servletResponse);System.out.println("time filter 耗時:"+(new Date().getTime()-start));System.out.println("time filter finish");}@Overridepublic void destroy() {System.out.println("time filter destroy");}}
如使用@Compent註解聲明不需要加入其它配置即可使得攔截器生效,但是默認攔截/*,會攔截所有請求。
二:使用@Bean注入自定義攔截器,依然上面的代碼,去掉@Compent註解,創建TimeWebConfig配置類:
import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.ArrayList;import java.util.List;@Configurationpublic class TimeWebConfig {@Beanpublic FilterRegistrationBean timeFilter(){FilterRegistrationBean registrationBean = new FilterRegistrationBean();TimeInterceptor interceptor = new TimeInterceptor();registrationBean.setFilter(interceptor);List<String> urls = new ArrayList<>();urls.add("/user/*");registrationBean.setUrlPatterns(urls);return registrationBean;}}
上面這兩種攔截請求的實現是基於JavaEE提供的Filter介面實現的,缺點在於,該攔截器實際上是一個過濾器,執行代碼的方法doFilter只提供了request,response等參數,當請求進入被過濾器攔截的時候,我們並不知道這個請求是由哪個控制器的哪個方法來執行的。
三:使用springMVC提供的攔截器,實現org.springframework.web.servlet.HandlerInterceptor介面:
創建自定義的攔截器:
import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Date;@Componentpublic class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {System.out.println("preHandler");System.out.println(((HandlerMethod) handler).getBean().getClass().getName());System.out.println(((HandlerMethod) handler).getMethod().getName());httpServletRequest.setAttribute("start", new Date().getTime());return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {System.out.println("postHandler");Long start = (Long) httpServletRequest.getAttribute("start");System.out.println("time interceptor 耗時:"+(new Date().getTime()-start));}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {System.out.println("afterCompletion");Long start = (Long) httpServletRequest.getAttribute("start");System.out.println("time interceptor 耗時:"+(new Date().getTime()-start));System.out.println("ex is:"+e);}}
創建配置類:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {@Autowiredprivate MyInterceptor interceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(interceptor).addPathPatterns("/user/*").excludePathPatterns("/blog/*");}}
此種方式的攔截器當中我們能夠獲取攔截的請求對應的類和方法的相關信息,缺點在於該handler對象無法獲取具體執行方法的參數信息。
四:利用Spring的切面(AOP)實現攔截器:
引入jar包:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
創建切片類:
import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.stereotype.Component;import java.util.Date;@Aspect@Componentpublic class TimeAspect {@Around("execution(* com.qinker.controller.UserController.*(..))")public Object handlerControllerMethod(ProceedingJoinPoint point) throws Throwable {System.out.println("time aspect start");long start = new Date().getTime();Object[] args = point.getArgs();for (Object obj : args) {System.out.println("arg is:"+obj);}Object obj = point.proceed();//具體方法的返回值System.out.println("aspect 耗時:"+(new Date().getTime()-start));System.out.println("time aspect end");return obj;}}
aspectj基於AOP實現的攔截器功能十分強大,具體詳解請參考spring官網網站的文檔。
⑹ JAVA代碼發送HTTP請求問題(我想實現和伺服器進行一次連接時發送兩次請求)
我覺得你這個問題的解決應該是你的程序做一次這個網站的登陸,而且這個登陸的動作應該是需要發生在你這段代碼以前,因為你這段代碼的動作其實只是訪問了一下那個網站,但是沒有任何的用戶或者是其他的信息。
一般來說你登陸以後,你會獲得一個token,用那個token就可以讓網站認為你已經登陸,然後改密碼什麼就好辦了。建議你先抓一下IE的包看看是人家的通信是怎麼樣的,然後用java做就好了。或者是那個網站有開發者文檔就最好了。
⑺ 北大青鳥java培訓:http協議請求處理過程
隨著互聯網的不斷發展,用戶在訪問互聯網的時候使用的終端設備類型也在不斷的變化,但是這些都是基於http協議來實現的,下面我們就簡單分析一下,http發送請求的處理過程。
HTTP協議是基於TCP協議的,所以它使用面向連接的方式發送請求,通過stream二進制流的方式傳給對方。
當然,到了TCP層,它會把二進制流變成一個的報文段發送給伺服器。
在發送給每個報文段的時候,都需要對方有一個回應ACK,來保證報文可靠地到達了對方。
如果沒有回應,那麼察纖TCP這一層會進行重新傳輸,直到可以到達。
同一個包有可能被傳了好多次,但是HTTP這一層不需要知道這一點,因為是TCP這一層在埋頭苦幹。
TCP層發送每一個報文的時候,都需要加上自己的地址(即源地址)和它想要去的地方(即目標地址),將這兩個信息放到IP頭裡面,交給IP層進行傳輸。
IP層需要查看目標地址和自己是否是在同一個區域網。
如果是,就發送ARP協議來請求這個目標地址對應的MAC地址,然後將源MAC和目標MAC放入MAC頭,發送出去即可。
如果不在同一個區域網,就需要發送到網關,還要需要發送ARP協議,來獲取網關的MAC地址,然後將源MAC和網關MAC放入MAC頭,發送出去。
網關收到包發現MAC符合,取出目標IP地址,根據路由協議找到下一跳的路由器,獲取下一跳路由器的MAC地址,將包發給下一跳路由器。
這樣路由器一跳一跳終於到達目標的區域網。
這個時候,後一跳的路由器能夠發現,目標地址就在自敗談仿己的某一個出口的區域網上。
於是,在這個區域網上發送ARP,獲得這個目標地址的MAC地址,將包發出去。
目標的機器發現MAC地址符合,就將包收起來;發現IP地址符合,根據IP頭中協議項,知道自己上一層是TCP協議,於是解析TCP的頭,裡面有序列號,IT培訓http://www.kmbdqn.cn/建議需要看一看這個序列包是不是我要的,如果是就放入緩存中然後返回一個ACK,如果不是就丟棄。
TCP頭裡面還有埠號,HTTP的伺服器正在監聽這個埠號。侍伏
於是,目標機器自然知道是HTTP伺服器這個進程想要這個包,於是將包發給HTTP伺服器。
HTTP伺服器的進程看到,原來這個請求是要訪問一個網頁,於是就把這個網頁發給客戶端。
⑻ java 怎麼接收http請求
用servlet接收。
具體步驟是寫一個類繼承HttpServlet,如果是接收get請求就重寫doGet(HttpServletRequest,HttpServletResponse),接收post就重寫doPost(HttpServletRequest,HttpServletResponse),共同處理post和get就重寫service(HttpServletRequest,HttpServletResponse)
其次在web.xml定義servlet標簽,以及你這個servlet要處理的請求mapping
最後把項目部署在tomcat之類的web容器中即可。
如果使用框架的話就另當別論了,比如spring 的DispatcherServlet。當然你也可以自己寫servlet。
⑼ 怎樣用JAVA實現模擬HTTP請求,得到伺服器的響應時間等參數
java.net.*;
publicclassHttpDemo{
publicstaticvoidmain(String[]args)throwsException{
URLurl=newURL('地址');
HttpURLConnectionhttp=(HttpURLConnection)url.openConnection();
//獲取網頁的源碼
BufferedReader游兆br=newBufferedReader(newInputStreamReader(http.getInputStream()));
String枝磨衡line="";
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
//獲取參數:
Stringvalue=getRequestProperty(Stringkey);
猛做}
}
⑽ 怎樣用JAVA實現模擬HTTP請求,得到伺服器的響應時間等參數
問題簡化一下:對一個ip,一個線程請求100次。該次請求的響應時間為調用httpClient前的響應時間減去接收到httpClient響應的時間。注意,本次請求是否有效要判斷。平均響應時間和最大響應時間只不過是響應時間的統計而已,可以用資料庫來做。
就是說資料庫記錄每次測試請求的響應時間,成功與否。統計數據最後出來。
只所以用多線程,是因為單線程順序請求100次,不能模擬伺服器真正的情況。