1. 如何在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之後再運行。
2. 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請求後要處理的操作
}
}
3. 如何設置手機的java接入點,怎樣進行http代理設置呢
GPRS設置: 1、選擇 設置--配置設置--預設配置設置,更改為"個人配置"。 2、更改後返回配置設置菜單,選擇"個人配置設置"。進入"個人帳號"選擇"操作"--"新增"--"網路" (有網路存在就選擇網路) 3、設置 帳號名稱:cmwap 主頁:(隨便寫一個,如: http://wap.tom.com ) 用戶名:(不填) 密碼:(不填) 使用首選接入點:選擇"取消" 4、點選進入"接入點設置" 代理:已啟動 代理地址:10.0.0.172 代理埠:不填(注意:這個不填80,彩信才填的,不過填80也沒關系) 傳輸方式:分組數據(分組數據就是指GPRS) 進入傳輸方式設置: 分組數據接入點:cmwap 鑒權類型:普通 用戶名:不填 密碼:不填 OK!GPRS設置完成 彩信設置: 1、選擇 設置--配置設置--預設配置設置,更改為"個人配置"。 2、更改後返回配置設置菜單,選擇"個人配置設置"。進入"個人帳號"選擇"操作"--"新增"--"彩信" (如果是多媒體信息就選擇多媒體信息) 3、設置:帳號名稱:彩信 伺服器地址: http://mmsc.monternet.com 使用首選接入點:取消 4、接入點設置:代理:啟動 代理地址:10.0.0.172 埠:80(一定要填) 傳輸方式:分組數據 5、傳輸方式設置:分組數據接入點:cmwap 鑒權類型:普通 用戶名:(不填) 密碼:(不填) OK!彩信設置也完成了 另外要注意的是: 只是這樣設置的話只能用機器自帶的瀏覽器上網,java軟體都不能接入網路如QQ(接入時分組數據不存在),還需要Java軟體接入網的設置。 Java軟體接入網的設置: 1、設置--配置設置--選擇"個人配置設置"。進入"個人帳號"選擇"操作"--"新增"--"接入點"(有"接入點"存在就選擇"接入點") 2、設置:帳號名稱:接入點(隨便寫其它名稱也行) 3、點選進入"接入點設置" 4、傳輸方式:分組數據 5、進入傳輸方式設置: 分組數據接入點:cmwap 鑒權類型:普通 用戶名:不填 密碼:不填 6、返回"個人帳號"選定"接入點"選擇"操作"--"啟動" 7、返回"配置設置"後選擇"首選接入點"選擇"接入點"(或者是你之前隨便寫其它名稱) OK!java軟體(QQ等)都可以接入網路了,保險期間再在「配置設置」中「將全部軟體啟動預設」
記得採納啊
4. Java上網參數設置
GPRS、彩信、收發電子郵件及QQ上網
完整上網設置解決方法
設置GPRS步驟
步驟如下:設置—→配置設置—→個人配置設置—→操作—→新增—→網路
接下來對網路進行配置:
帳號名稱:默認(我的網),可換成自己喜歡的名字
主頁:
http://wap.monternet.com
用戶名:(空)
密碼:(空)
使用首選接入點:取消
接入點設置:
代理:啟動
代理地址:
10.0.0.172
代理埠:
80
傳輸方式:分組數據
傳輸方式設置:
分組數據接入點:
cmwap
網路類型:
Ipv4
鑒權類型:普通
用戶名:(空)
密碼:(空)
這樣,
GPRS
就設置好了
接下來設置彩信
首先要新增
步驟如下:設置—→配置設置—→個人配置設置—→操作—→新增—→彩信
接下來對彩信進行配置:
帳號名稱:默認(彩信),可換成自己喜歡的名字
伺服器地:
http://mmsc.monternet.com
(注意:從http的h開始,要不然設置就白費了)
使用首選接入點:取消
接入點設置:
代理:啟動
代理地址:
10.0.0.172
代理埠:
80
傳輸方式:分組數據
傳輸方式設置:
分組數據接入點:
cmwap
網路類型:
Ipv4
鑒權類型:普通
用戶名:(空)
密碼:(空)
OK
,彩信也設置好了
然後回到:設置—→配置設置—→預設配置設置,選擇:個人配置
設置—→配置設置—→為全部應用軟體啟動預設(有提示出現,選擇:確認)
5. Java怎麼設置代理來訪問網路
你的問題應該是:在java中通過編程設置代理伺服器並訪問網路,現在作答如下:
1,講解一下基礎知識:
HTTP:是應用層協議,是基於傳輸層協議的。
TCP: 是傳輸層協議,是基於網路層協議的。
IP: 是網路層協議。
一個TCP的連接要進行三次握手(就像轉戶口一樣,不詳說),HTTP只是一個應用協議,也就是相當於一個自定義協議,即其沒有對底層的傳輸方式進行干涉,只是對數據內容格式進行了定義。
2,我們再說說HTTP代理,從上可以理解,HTTP代理伺服器就是這樣一台機器:你把所有的HTTP請求都發到這個 HTTP代理伺服器,然後這個HTTP代理伺服器請求你要訪問的最終地址,把響應回傳給你。這里還要注意它代理的是HTTP協議,而HTTP又是基於 TCP的,也就是說這個伺服器代理的是指定HTTP內容格式的TCP連接。再說下去也沒意思了,看以下代碼:
//以下地址是代理伺服器的地址
Socket socket = new Socket("10.1.2.188", 80);
//寫與的內容就是遵循HTTP請求協議格式的內容,請求網路
socket.getOutputStream().write(new String("GET http://www..com/ HTTP/1.1\r\n\r\n").getBytes());
byte[] bs = new byte[1024];
InputStream is = socket.getInputStream();
int i;
while ((i = is.read(bs)) > 0) {
System.out.println(new String(bs, 0, i));
}
is.close();
3,當然在Java中,有Proxy代理上網的使用,此時使用URL(HTTP)就不涉及Socket(TCP)了,看如下代碼
//設置代理
System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", "10.1.2.188");
System.setProperty("http.proxyPort", "80");
//直接訪問目的地址
URL url = new URL("http://www..com");
URLConnection con = url.openConnection();
InputStreamReader isr = new InputStreamReader(con.getInputStream());
char[] cs = new char[1024];
int i = 0;
while ((i = isr.read(cs)) > 0) {
System.out.println(new String(cs, 0, i));
}
isr.close();
6. java使用HttpResponse請求其他系統的介面,對應Postman的設置
首先弄懂測試的需求,比如介面功能測試需求是什麼(什麼樣的輸入參數,返回什麼樣的輸出)、介面性能測試需求是什麼(最大支持多少並發訪問,後台伺服器資源配置極限是多少等等)
然後選擇一款介面測試工具(一般推薦 POSTMAN JMETER等等),也可以自己開發介面工具。
編寫介面功能測試和性能測試的用例(這個和一般的黑盒測試用例差不多,預置條件,測試步驟,預期結果)
使用測試工具或者腳本,執行測試用例。含提交BUG,跟蹤BUG閉環等等。
分析測試結果,出具測試報告。
PS:介面的功能測試很簡單,一般是訪問的URL,帶什麼參數,然後什麼加密方式,然後看返回值符不符合預期就可以了,把各種正常異常情況考慮到。介面性能測試的話除了要設置集合點並發訪問後台介面,然後還要在後台伺服器加監控,以便於檢測系統資源,一般通用的監控指標CPU 內存 網路 等等。當然具體也要看你要測試什麼樣的介面,弄懂介面的協議再測試。希望能幫到你。
7. java中如何設置HTTP協議的頭信息(header)
首先,我們先看一下http的頭信息到底是什麼:
HTTP(HyperTextTransferProtocol) 即超文本傳輸協議,目前網頁傳輸的的通用協議。HTTP協議採用了請求/響應模型,瀏覽器或其他客戶端發出請求,伺服器給與響應。就整個網路資源傳輸而 言,包括message-header和message-body兩部分。首先傳遞message- header,即http header消息。http header 消息通常被分為4個部分: general header, request header, response header, entity header。但是這種分法就理解而言,感覺界限不太明確,根據日常使用,大體分為Request和Response兩部分。
在通常的servlet/jsp應用中,我們只是從http的header中取得信息,如果要設置信息,需要用到HttpClient,具體的設置方法如下:
HttpResponse response = null;
HttpGet get = new HttpGet(url);
get.addHeader("Accept", "text/html");
get.addHeader("Accept-Charset", "utf-8");
get.addHeader("Accept-Encoding", "gzip");
get.addHeader("Accept-Language", "en-US,en");
get.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22");
response = client.execute(get);
HttpEntity entity = response.getEntity();
Header header = entity.getContentEncoding();
if (header != null)
{
HeaderElement[] codecs = header.getElements();
for (int i = 0; i < codecs.length; i++)
{
if (codecs[i].getName().equalsIgnoreCase("gzip"))
{
response.setEntity(new GzipDecompressingEntity(entity));
}
}
}
return response;
其中,client為一個HttpClient的實力,創建方式如:
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
cm = new (schemeRegistry);
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(2);
HttpHost googleResearch = new HttpHost("research.google.com", 80);
HttpHost wikipediaEn = new HttpHost("en.wikipedia.org", 80);
cm.setMaxPerRoute(new HttpRoute(googleResearch), 30);
cm.setMaxPerRoute(new HttpRoute(wikipediaEn), 50);
DefaultHttpClient client = new DefaultHttpClient(cm);
8. 如何使用HttpClient包實現JAVA發起HTTP請求
HttpClient可以發起Http請求.
比如要獲取某頁面, 那麼需要分析, 是POST請求還是GET請求.
分析請求的標題頭 ,參數 ,cookie等,
所以 , 分析頁面請求, 才是關鍵, 分析好了, 直接按套路,設置標頭, 設置參數, 設置cookie, 然後提交POST/GET就可以了
推薦win10自帶的EDGE瀏覽器, 按F12彈出開發窗口, 裡面詳細記錄了http請求
9. java雙網卡怎麼做http訪問
用雙網卡同時訪問內外網暫時沒有很完美的解決辦法,因為存在路由沖突,畢竟有兩個網關地址,現在可以試試下面的辦法:
先來解決雙網卡沖突的問題。可以通過改變路由地址表搞定。以你的單位用機為例,機器有兩塊網卡,接到兩台路由器上:
內部網地址設置為192.168.1.110,子網掩碼:255.255.255.0,網關:192.168.1.1
辦公網地址:10.94.12.123,子網掩碼:255.255.255.0,網關:10.94.12.254
如果按正常的設置方法設置每塊網卡的IP地址和網關,再cmd下使用route print查看時會看到以0.0.0.0 0.0.0.0 開頭的兩個東西,即指向0.0.0.0的有兩個網關,這樣就會出現路由沖突,兩個網路的訪問存在困難。要實現同時訪問兩個網路就要用到route命令
10. 手機Java設置網路
大部分機型網路設置
1)在主菜單 -> 手機設定 -> 連接(遙桿往右移4下) -> 互聯網設定 -> 互聯網模式 -> 添加新模式
2)名稱:自定義(如:移動夢網)
3)連接方式-添加新帳號-分組數據-名稱:(如gprs)
4)APN(接入點名稱):cmwap 或cmnet
5)用戶名稱:不填 密碼:不填 然後儲存
6)然後在互聯網模式選定 移動夢網 按-更多-設定
7)連接方式:選擇剛才添加的移動夢網
8)互聯網模式:wap,使用代理選擇是
9)代理址:010.000.000.172
10)安全設定:關閉
用戶名稱:不填
密碼:不填 然後儲存
11)最後再在互聯網模式選定 中國移動 按-更多-高級-更改主頁
12)名稱:隨便寫
13)網址:wap.monternet.com
UIQ手機上網設置
菜單 -> 工具 -> 控制面板 -> 連接 -> 互聯網帳號 -> 新建帳戶 ->數據
帳號名稱:GPRS
地址: cmwap
選擇更多
代理: 「 使用代理伺服器 」 (選中,前面打勾)
代理伺服器地址:010.000.000.172
代理伺服器埠:80
注意:這時會出現一段提示語: 「 如果您要使用GPRS連接互聯網或發送和接收電子郵件,則必須將其添加 至組群帳戶。是否要立即向組群帳戶添加GPRS? 」 選擇 「 是 」
還會出現一個 「 添加至組群帳戶:互聯網? 」 選保存,完成