當前位置:首頁 » 編程語言 » java請求http

java請求http

發布時間: 2022-04-17 09:51:49

java 接受http請求

使用servlet


public class Test extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public Test() {

super();

// TODO Auto-generated constructor stub

}


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收get請求

// 這里寫你接收request請求後要處理的操作

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收post請求

// 這里寫你接收request請求後要處理的操作

}


}


② 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("地址");

    if (headers != null) {

    for (String key : headers.keySet()) {

    httpPost.setHeader(key, headers.get(key));

    }

    }

    備註:只需要在map中設置相應的請求頭內容即可。根據實際需要修改即可

③ 怎麼用java寫一個http介面

一個servlet介面就可以了啊:

HTTP Header 請求實例

下面的實例使用 HttpServletRequest 的getHeaderNames()方法讀取 HTTP 頭信息。該方法返回一個枚舉,包含與當前的 HTTP 請求相關的頭信息。

一旦我們有一個枚舉,我們可以以標准方式循環枚舉,使用hasMoreElements()方法來確定何時停止,使用nextElement()方法來獲取每個參數的名稱。

//導入必需的java庫
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.Enumeration;

importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

@WebServlet("/DisplayHeader")

//擴展HttpServlet類
{

//處理GET方法請求的方法
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
{
//設置響應內容類型
response.setContentType("text/html;charset=UTF-8");

PrintWriterout=response.getWriter();
Stringtitle="HTTPHeader請求實例-菜鳥教程實例";
StringdocType=
"<!DOCTYPEhtml> ";
out.println(docType+
"<html> "+
"<head><metacharset="utf-8"><title>"+title+"</title></head> "+
"<bodybgcolor="#f0f0f0"> "+
"<h1align="center">"+title+"</h1> "+
"<tablewidth="100%"border="1"align="center"> "+
"<trbgcolor="#949494"> "+
"<th>Header名稱</th><th>Header值</th> "+
"</tr> ");

EnumerationheaderNames=request.getHeaderNames();

while(headerNames.hasMoreElements()){
StringparamName=(String)headerNames.nextElement();
out.print("<tr><td>"+paramName+"</td> ");
StringparamValue=request.getHeader(paramName);
out.println("<td>"+paramValue+"</td></tr> ");
}
out.println("</table> </body></html>");
}
//處理POST方法請求的方法
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}

④ java如何調用對方http介面

你是指發送http請求嗎,可以使用Apache 的 HttpClient

//構建HttpClient實例
CloseableHttpClienthttpclient=HttpClients.createDefault();//設置請求超時時間
RequestConfigrequestConfig=RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).setConnectionRequestTimeout(60000).build();//指定POST請求
HttpPosthttppost=newHttpPost(url);
httppost.setConfig(requestConfig);//包裝請求體
List<NameValuePair>params=newArrayList<NameValuePair>();params.addAll(content);
HttpEntityrequest=newUrlEncodedFormEntity(params,"UTF-8");//發送請求
httppost.setEntity(request);
=httpclient.execute(httppost);//讀取響應
HttpEntityentity=httpResponse.getEntity();Stringresult=null;if(entity!=null){
result=EntityUtils.toString(entity,"UTF-8");
}

⑤ java HTTP請求 處理

javax.servlet.http.HttpResponse類用於產生返回頁面.通過HttpResponse定義的方法getOutputStream()可以獲得ServletOutputStream的實例,這樣用戶就可以利用ServletOutputStream.write方法向輸出流中寫入返回頁面的內容. 但是ServletOutputStream使用的是預設的編碼方式,如果要使返回頁面中的中文字 符能夠正常顯示,最好顯示地指定所用的字元編碼方式. 通常需要構造一個 OutputStreamWriter , 常式如下:

public void doGet (HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

res.setContentType("text/html");

ServletOutputStream out = res.getOutputStream();

OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312");

ow.write("這是測試");

ow.flush();

ow.close();

}

⑥ java 怎麼調用http介面

方法:只要New一個Map,然後把要傳遞的參數以鍵值對的形式存入Map即可。privatevoidExample(){Stringurl=地址;Mapparam=newHashMap();p.put("ParamName","ParamValue");Stringhtml=this.visitURL(url,param);}

⑦ java http請求中文路徑

不能用中文的,把中文的子文件夾名改為英語,java的路徑是不能有中文出現的

⑧ 如何在java中發起http和https請求

1.寫http請求方法
[java] view plain

//處理http請求 requestUrl為請求地址 requestMethod請求方式,值為"GET"或"POST"
public static String httpRequest(String requestUrl,String requestMethod,String outputStr){
StringBuffer buffer=null;
try{
URL url=new URL(requestUrl);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod(requestMethod);
conn.connect();
//往伺服器端寫內容 也就是發起http請求需要帶的參數
if(null!=outputStr){
OutputStream os=conn.getOutputStream();
os.write(outputStr.getBytes("utf-8"));
os.close();
}
//讀取伺服器端返回的內容
InputStream is=conn.getInputStream();
InputStreamReader isr=new InputStreamReader(is,"utf-8");
BufferedReader br=new BufferedReader(isr);
buffer=new StringBuffer();
String line=null;
while((line=br.readLine())!=null){
buffer.append(line);
}
}catch(Exception e){
e.printStackTrace();
}
return buffer.toString();
}
2.測試。
[java] view plain

public static void main(String[] args){
String s=httpRequest("http://www.qq.com","GET",null);
System.out.println(s);
}
輸出結果為www.qq.com的源代碼,說明請求成功。
註:1).第一個參數url需要寫全地址,即前邊的http必須寫上,不能只寫www.qq.com這樣的。

2).第二個參數是請求方式,一般介面調用會給出URL和請求方式說明。
3).第三個參數是我們在發起請求的時候傳遞參數到所要請求的伺服器,要傳遞的參數也要看介面文檔確定格式,一般是封裝成json或xml.
4).返回內容是String類,但是一般是有格式的json或者xml。
二:發起https請求。
1.https是對鏈接加了安全證書SSL的,如果伺服器中沒有相關鏈接的SSL證書,它就不能夠信任那個鏈接,也就不會訪問到了。所以我們第一步是自定義一個信任管理器。自要實現自帶的X509TrustManager介面就可以了。
[java] view plain

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class MyX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
}
註:1)需要的包都是java自帶的,所以不用引入額外的包。
2.)可以看到裡面的方法都是空的,當方法為空是默認為所有的鏈接都為安全,也就是所有的鏈接都能夠訪問到。當然這樣有一定的安全風險,可以根據實際需要寫入內容。

2.編寫https請求方法。
[java] view plain

/*
* 處理https GET/POST請求
* 請求地址、請求方法、參數
* */
public static String httpsRequest(String requestUrl,String requestMethod,String outputStr){
StringBuffer buffer=null;
try{
//創建SSLContext
SSLContext sslContext=SSLContext.getInstance("SSL");
TrustManager[] tm={new MyX509TrustManager()};
//初始化
sslContext.init(null, tm, new java.security.SecureRandom());;
//獲取SSLSocketFactory對象
SSLSocketFactory ssf=sslContext.getSocketFactory();
URL url=new URL(requestUrl);
HttpsURLConnection conn=(HttpsURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(requestMethod);
//設置當前實例使用的SSLSoctetFactory
conn.setSSLSocketFactory(ssf);
conn.connect();
//往伺服器端寫內容
if(null!=outputStr){
OutputStream os=conn.getOutputStream();
os.write(outputStr.getBytes("utf-8"));
os.close();
}
//讀取伺服器端返回的內容
InputStream is=conn.getInputStream();
InputStreamReader isr=new InputStreamReader(is,"utf-8");
BufferedReader br=new BufferedReader(isr);
buffer=new StringBuffer();
String line=null;
while((line=br.readLine())!=null){
buffer.append(line);
}
}catch(Exception e){
e.printStackTrace();
}
return buffer.toString();
}
可見和http訪問的方法類似,只是多了SSL的相關處理。
3.測試。先用http請求的方法訪問,再用https的請求方法訪問,進行對比。

http訪問:
[java] view plain

public static void main(String[] args){
String s=httpRequest("https://kyfw.12306.cn/","GET",null);
System.out.println(s);
}
結果為:

https訪問:

[java] view plain

public static void main(String[] args){
String s=httpsRequest("https://kyfw.12306.cn/","GET",null);
System.out.println(s);
}
結果為:

可見https的鏈接一定要進行SSL的驗證或者過濾之後才能夠訪問。

三:https的另一種訪問方式——導入服務端的安全證書。
1.下載需要訪問的鏈接所需要的安全證書。https://kyfw.12306.cn/ 以這個網址為例。
1)在瀏覽器上訪問https://kyfw.12306.cn/。

2)點擊上圖的那個打了×的鎖查看證書。

3)選擇復制到文件進行導出,我們把它導入到java項目所使用的jre的lib文件下的security文件夾中去,我的是這個路徑。D:\Program Files (x86)\Java\jre8\lib\security

註:中間需要選導出格式,就選默認的就行,還需要命名,我命名的是12306.

2.打開cmd,進入到java項目所使用的jre的lib文件下的security目錄。
3.在命令行輸入 Keytool -import -alias 12306 -file 12306.cer -keystore cacerts
4.回車後會讓輸入口令,一般默認是changeit,輸入時不顯示,輸入完直接按回車,會讓確認是否信任該證書,輸入y,就會提示導入成功。

5.導入成功後就能像請求http一樣請求https了。

測試:
[java] view plain

public static void main(String[] args){
String s=httpRequest("https://kyfw.12306.cn/","GET",null);
System.out.println(s);
}
結果:
現在就可以用http的方法請求https了。
註:有時候這一步還是會出錯,那可能是jre的版本不對,我們右鍵run as——run configurations,選擇證書所在的jre之後再運行。

⑨ 怎樣用JAVA實現模擬HTTP請求,得到伺服器的響應時間等參數

使用httpconnection方法連接,前後記錄系統時間並相減,得到響應時間,伺服器參數可以用過response返回或者保存在session中。

⑩ java如何調用對方http介面 新手虛心求教

importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.InputStreamReader;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.net.URLEncoder;

publicclassDemoTest1{

publicstaticfinalStringGET_URL="http://112.4.27.9/mall-back/if_user/store_list?storeId=32";
//publicstaticfinalStringPOST_URL="http://112.4.27.9/mall-back/if_user/store_list";
//妙兜測試介面
publicstaticfinalStringPOST_URL="http://121.40.204.191:8180/mdserver/service/installLock";

/**
*介面調用GET
*/
(){
try{
URLurl=newURL(GET_URL);//把字元串轉換為URL請求地址
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();//打開連接
connection.connect();//連接會話
//獲取輸入流
BufferedReaderbr=newBufferedReader(newInputStreamReader(connection.getInputStream(),"UTF-8"));
Stringline;
StringBuildersb=newStringBuilder();
while((line=br.readLine())!=null){//循環讀取流
sb.append(line);
}
br.close();//關閉流
connection.disconnect();//斷開連接
System.out.println(sb.toString());
}catch(Exceptione){
e.printStackTrace();
System.out.println("失敗!");
}
}

/**
*介面調用POST
*/
(){
try{
URLurl=newURL(POST_URL);

//將url以open方法返回的urlConnection連接強轉為HttpURLConnection連接(標識一個url所引用的遠程對象連接)
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();//此時cnnection只是為一個連接對象,待連接中

//設置連接輸出流為true,默認false(post請求是以流的方式隱式的傳遞參數)
connection.setDoOutput(true);

//設置連接輸入流為true
connection.setDoInput(true);

//設置請求方式為post
connection.setRequestMethod("POST");

//post請求緩存設為false
connection.setUseCaches(false);

//設置該HttpURLConnection實例是否自動執行重定向
connection.setInstanceFollowRedirects(true);

//設置請求頭裡面的各個屬性(以下為設置內容的類型,設置為經過urlEncoded編碼過的from參數)
//application/x-javascripttext/xml->xml數據application/x-javascript->json對象application/x-www-form-urlencoded->表單數據
//;charset=utf-8必須要,不然妙兜那邊會出現亂碼【★★★★★】
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

//建立連接(請求未開始,直到connection.getInputStream()方法調用時才發起,以上各個參數設置需在此方法之前進行)
connection.connect();

//創建輸入輸出流,用於往連接裡面輸出攜帶的參數,(輸出內容為?後面的內容)
DataOutputStreamdataout=newDataOutputStream(connection.getOutputStream());

Stringapp_key="app_key="+URLEncoder.encode("","utf-8");//已修改【改為錯誤數據,以免信息泄露】
Stringagt_num="&agt_num="+URLEncoder.encode("10111","utf-8");//已修改【改為錯誤數據,以免信息泄露】
Stringpid="&pid="+URLEncoder.encode("BLZXA150401111","utf-8");//已修改【改為錯誤數據,以免信息泄露】
Stringdepartid="&departid="+URLEncoder.encode("10007111","utf-8");//已修改【改為錯誤數據,以免信息泄露】
Stringinstall_lock_name="&install_lock_name="+URLEncoder.encode("南天大門","utf-8");
Stringinstall_address="&install_address="+URLEncoder.encode("北京育新","utf-8");
Stringinstall_gps="&install_gps="+URLEncoder.encode("116.350888,40.011001","utf-8");
Stringinstall_work="&install_work="+URLEncoder.encode("小李","utf-8");
Stringinstall_telete="&install_telete="+URLEncoder.encode("13000000000","utf-8");
Stringintall_comm="&intall_comm="+URLEncoder.encode("一切正常","utf-8");

//格式parm=aaa=111&bbb=222&ccc=333&ddd=444
Stringparm=app_key+agt_num+pid+departid+install_lock_name+install_address+install_gps+install_work+install_telete+intall_comm;

//將參數輸出到連接
dataout.writeBytes(parm);

//輸出完成後刷新並關閉流
dataout.flush();
dataout.close();//重要且易忽略步驟(關閉流,切記!)

//System.out.println(connection.getResponseCode());

//連接發起請求,處理伺服器響應(從連接獲取到輸入流並包裝為bufferedReader)
BufferedReaderbf=newBufferedReader(newInputStreamReader(connection.getInputStream(),"UTF-8"));
Stringline;
StringBuildersb=newStringBuilder();//用來存儲響應數據

//循環讀取流,若不到結尾處
while((line=bf.readLine())!=null){
//sb.append(bf.readLine());
sb.append(line).append(System.getProperty("line.separator"));
}
bf.close();//重要且易忽略步驟(關閉流,切記!)
connection.disconnect();//銷毀連接
System.out.println(sb.toString());

}catch(Exceptione){
e.printStackTrace();
}
}

publicstaticvoidmain(String[]args){
//httpURLConectionGET();
httpURLConnectionPOST();
}
}

熱點內容
sql資料庫的埠 發布:2025-01-22 12:20:02 瀏覽:362
安卓最終幻想8怎麼設置中文 發布:2025-01-22 12:19:23 瀏覽:651
怎麼查電腦配置和網路 發布:2025-01-22 12:19:16 瀏覽:586
linuxsnmp查看 發布:2025-01-22 12:17:49 瀏覽:37
安卓數據線怎麼接藍牙 發布:2025-01-22 12:07:29 瀏覽:229
扣扣賬號多少次密碼不正確會被封 發布:2025-01-22 12:07:19 瀏覽:400
python是32位還是64位 發布:2025-01-22 11:51:41 瀏覽:894
鈴聲多多緩存文件夾 發布:2025-01-22 11:51:39 瀏覽:724
java按鍵精靈 發布:2025-01-22 11:49:31 瀏覽:81
python配色 發布:2025-01-22 11:46:40 瀏覽:613