成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java 發送http請求(get、post)的示例

瀏覽:150日期:2022-08-22 09:03:31

1.情景展示

java發送get請求、post請求(form表單、json數據)至另一服務器;

可設置HTTP請求頭部信息,可以接收服務器返回cookie信息,可以上傳文件等;

2.代碼實現

所需jar包:httpcore-4.4.1.jar;httpclient-4.4.1.jar;httpmime-4.4.1.jar;epoint-utils-9.3.3.jar

import java.io.File;import java.io.IOException;import java.io.InputStream;import java.nio.charset.Charset;import java.security.GeneralSecurityException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPatch;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.TrustStrategy;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.message.BasicNameValuePair;import org.apache.http.ssl.SSLContextBuilder;import org.apache.http.util.EntityUtils;import com.epoint.core.utils.string.StringUtil;/** * HttpClient工具類,使用http-client包實現,原先的common-httpclient已經淘汰 * * @作者 ko * @version [版本號, 2017年10月18日] */public class HttpUtil{ private static PoolingHttpClientConnectionManager connMgr; private static RequestConfig requestConfig; private static final int MAX_TIMEOUT = 7000; /** * 直接以流返回 */ public static final int RTN_TYPE_1 = 1; /** * 直接以string返回 */ public static final int RTN_TYPE_2 = 2; /** * 以map返回,reslut:接口結果string;statusCode:http狀態碼 */ public static final int RTN_TYPE_3 = 3; /** * 以map返回,reslut:接口結果string;statusCode:http狀態碼;cookie:response的cookie * cookie值鍵值對,格式 key1=value1;key2=value2;... */ public static final int RTN_TYPE_4 = 4; /** * 默認上傳文件的文件流或file 的key Name */ private static final String DEFAULT_BINARYBODY_KEYNAME = 'file'; static {// 設置連接池connMgr = new PoolingHttpClientConnectionManager();// 設置連接池大小connMgr.setMaxTotal(100);connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());// 在提交請求之前 測試連接是否可用connMgr.setValidateAfterInactivity(1); RequestConfig.Builder configBuilder = RequestConfig.custom();// 設置連接超時configBuilder.setConnectTimeout(MAX_TIMEOUT);// 設置讀取超時configBuilder.setSocketTimeout(MAX_TIMEOUT);// 設置從連接池獲取連接實例的超時configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);requestConfig = configBuilder.build(); } /** * 發送 GET請求 * * @param apiUrl * API接口URL * @return String 響應內容 */ public static String doGet(String apiUrl) {return doHttp(apiUrl, null, 'get', RTN_TYPE_2); } /** * 發送POST請求 * * @param apiUrl * API接口URL * @param params * K-V參數 * @return String 響應內容 */ public static String doPost(String apiUrl, Map<String, Object> params) {return doHttp(apiUrl, params, 'post', RTN_TYPE_2); } /** * 發送POST請求 * * @param apiUrl * API接口URL * @param json * json參數 * @return String 響應內容 */ public static String doPostJson(String apiUrl, String json) {return doHttp(apiUrl, json, 'post', RTN_TYPE_2); } /** * 發送 http 請求 * * @param apiUrl * API接口URL * @param params * {Map<String, Object> K-V形式、json字符串} * @param method * {null、或者post:POST請求、patch:PATCH請求、delete:DELETE請求、get:GET請求} * @param type * {HttpUtil.RTN_TYPE_1:請求返回stream(此時流需要在外部手動關閉);HttpUtil. * RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個map,map包含結果( * 結果是string形式)以及http狀態碼;HttpUtil.RTN_TYPE_4:返回一個map,map包含結果( * 結果是string形式), http狀態碼和cookie;其他情況返回string} * 如果結果是個map,key為:result,statusCode,cookie,分別返回 結果 * string,http狀態碼,cookie; cookie值鍵值對,格式 * key1=value1;key2=value2;... * @return stream或 string 或 map */ public static <T> T doHttp(String apiUrl, Object params, String method, int type) {return doHttp(apiUrl, null, params, method, type); } /** * 發送 http 請求 * * @param apiUrl * API接口URL * @param headerMap * header信息Map<String, String>,可設置cookie * @param params * {Map<String, Object> K-V形式、json字符串} * @param method * {null、或者post:POST請求、patch:PATCH請求、delete:DELETE請求、get:GET請求} * @param type * {HttpUtil.RTN_TYPE_1:請求返回stream(此時流需要在外部手動關閉);HttpUtil. * RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個map,map包含結果( * 結果是string形式)以及http狀態碼;HttpUtil.RTN_TYPE_4:返回一個map,map包含結果( * 結果是string形式), http狀態碼和cookie;其他情況返回string} * 如果結果是個map,key為:result,statusCode,cookie,分別返回 結果 * string,http狀態碼,cookie; cookie值鍵值對,格式 * key1=value1;key2=value2;... * @return stream或 string 或 map */ public static <T> T doHttp(String apiUrl, Map<String, String> headerMap, Object params, String method, int type) {CloseableHttpClient httpClient = null;if (isSSL(apiUrl)) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();}else { httpClient = HttpClients.createDefault();}return doHttp(httpClient, apiUrl, headerMap, params, method, type); } /** * 發送 http 請求 * * @param httpClient * httpclient對象 由外部傳入,用戶 需要保持登錄狀態等情況 此時如果要ssl,那么要在外部加入ssl特性 * httpClient = * HttpClients.custom().setSSLSocketFactory(HttpUtil. * createSSLConnSocketFactory()) * .setConnectionManager(HttpUtil.getConnMgr()). * setDefaultRequestConfig(HttpUtil..getRequestConfig()).build(); * @param apiUrl * API接口URL * @param headerMap * header信息Map<String, String>,可設置cookie * * @param params * {Map<String, Object> K-V形式、json字符串} * @param method * {null、或者post:POST請求、patch:PATCH請求、delete:DELETE請求、get:GET請求} * @param type * {HttpUtil.RTN_TYPE_1:請求返回stream(此時流需要在外部手動關閉);HttpUtil. * RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個map,map包含結果( * 結果是string形式)以及http狀態碼;HttpUtil.RTN_TYPE_4:返回一個map,map包含結果( * 結果是string形式), http狀態碼和cookie;其他情況返回string} * 如果結果是個map,key為:result,statusCode,cookie,分別返回 結果 * string,http狀態碼,cookie; cookie值鍵值對,格式 * key1=value1;key2=value2;... * @return stream或 string 或 map */ @SuppressWarnings('unchecked') public static <T> T doHttp(CloseableHttpClient httpClient, String apiUrl, Map<String, String> headerMap, Object params, String method, int type) {HttpRequestBase httpPost = null;if (StringUtil.isNotBlank(method)) { if ('patch'.equalsIgnoreCase(method)) {httpPost = new HttpPatch(apiUrl); } else if ('delete'.equalsIgnoreCase(method)) {httpPost = new HttpDelete(apiUrl); } else if ('get'.equalsIgnoreCase(method)) {httpPost = new HttpGet(apiUrl); } else if ('post'.equalsIgnoreCase(method)) {httpPost = new HttpPost(apiUrl); }}else { httpPost = new HttpPost(apiUrl);}CloseableHttpResponse response = null; try { // 設置header信息 if (headerMap != null && !headerMap.isEmpty()) {for (Map.Entry<String, String> entry : headerMap.entrySet()) { httpPost.addHeader(entry.getKey(), entry.getValue());} } if (isSSL(apiUrl)) {httpPost.setConfig(requestConfig); } // 參數不為null、要處理參數 if (params != null) {// get請求拼接在url后面if (httpPost instanceof HttpGet) { StringBuffer param = new StringBuffer(); if (params instanceof Map) {Map<String, Object> paramsConvert = (Map<String, Object>) params;int i = 0;for (String key : paramsConvert.keySet()) { if (i == 0)param.append('?'); elseparam.append('&'); param.append(key).append('=').append(paramsConvert.get(key)); i++;} } else {param.append('?' + params.toString()); } apiUrl += param;}// delete請求暫不處理else if (!(httpPost instanceof HttpDelete)) { // K-V形式 if (params instanceof Map) {Map<String, Object> paramsConvert = (Map<String, Object>) params; List<NameValuePair> pairList = new ArrayList<>(paramsConvert.size());for (Map.Entry<String, Object> entry : paramsConvert.entrySet()) { NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue() == null ? '' : entry.getValue().toString()); pairList.add(pair);}((HttpEntityEnclosingRequestBase) httpPost).setEntity(new UrlEncodedFormEntity(pairList, Charset.forName('UTF-8'))); } // json格式 else {StringEntity stringEntity = new StringEntity(params.toString(), 'UTF-8');stringEntity.setContentEncoding('UTF-8');stringEntity.setContentType('application/json');((HttpEntityEnclosingRequestBase) httpPost).setEntity(stringEntity); }} } response = httpClient.execute(httpPost); // int statusCode = response.getStatusLine().getStatusCode(); // if (statusCode != HttpStatus.SC_OK) { // return null; // } HttpEntity entity = response.getEntity(); if (entity != null) {if (type == RTN_TYPE_1) { return (T) entity.getContent();}else if (RTN_TYPE_2 == type) { return (T) EntityUtils.toString(entity, 'UTF-8');}else if (RTN_TYPE_3 == type || RTN_TYPE_4 == type) { Map<String, String> rtnMap = new HashMap<String, String>(); rtnMap.put('result', EntityUtils.toString(entity, 'UTF-8')); rtnMap.put('statusCode', response.getStatusLine().getStatusCode() + ''); if (RTN_TYPE_4 == type) {rtnMap.put('cookie', getCookie(response)); } return (T) rtnMap;}else { return (T) EntityUtils.toString(entity, 'UTF-8');} }}catch (Exception e) { e.printStackTrace();}finally { if (response != null && type != RTN_TYPE_1) {try { EntityUtils.consume(response.getEntity());}catch (IOException e) { e.printStackTrace();} }}return null; } /** * 上傳附件(post形式) * * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param file * 可以選擇本地文件上傳;如果傳了file,又傳了fileName,那么文件名以fileName為準,否則 是file的文件名 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ public static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, File file, String fileName, boolean ssl) {return upload(url, headerMap, paramMap, file, null, fileName, ssl); } /** * 上傳附件(post形式) * * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param in * 文件流 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ public static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, InputStream in, String fileName, boolean ssl) {return upload(url, headerMap, paramMap, null, in, fileName, ssl); } /** * 上傳附件(post形式) * * @param httpClient * 外部傳入httpClient * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param file * 可以選擇本地文件上傳;如果傳了file,又傳了fileName,那么文件名以fileName為準,否則 是file的文件名 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ public static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap, Map<String, String> paramMap, File file, String fileName, boolean ssl) {return upload(httpClient, url, headerMap, paramMap, file, null, fileName, ssl); } /** * 上傳附件(post形式) * * @param httpClient * 外部傳入httpClient * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param in * 文件流 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ public static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap, Map<String, String> paramMap, InputStream in, String fileName, boolean ssl) {return upload(httpClient, url, headerMap, paramMap, null, in, fileName, ssl); } /** * 上傳附件(post形式) * * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param file * 可以選擇本地文件上傳,file,in互斥;如果傳了file,又傳了fileName,那么文件名以fileName為準,否則 * 是file的文件名 * @param in * 文件流 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ private static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, File file, InputStream in, String fileName, boolean ssl) {CloseableHttpClient httpClient = null;if (ssl) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();}else { httpClient = HttpClients.createDefault();}return upload(httpClient, url, headerMap, paramMap, file, in, fileName, ssl); } /** * 上傳附件(post形式) * * @param httpClient * 外部傳入httpClient * @param url * 請求地址 * @param headerMap * header參數map Map<String, String> * @param paramMap * 額外的參數map,Map<String, String> * @param file * 可以選擇本地文件上傳,file,in互斥;如果傳了file,又傳了fileName,那么文件名以fileName為準,否則 * 是file的文件名 * @param in * 文件流 * @param fileName * 以流傳輸時,必須指定文件名 * @param ssl * 是否需要ssl * @return result,返回上傳結果,如果接口沒有返回值,則為狀態碼 */ private static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap, Map<String, String> paramMap, File file, InputStream in, String fileName, boolean ssl) {String result = '';CloseableHttpResponse response = null;try { HttpPost httpPost = new HttpPost(url); // 設置header信息 if (headerMap != null && !headerMap.isEmpty()) {for (Map.Entry<String, String> entry : headerMap.entrySet()) { httpPost.addHeader(entry.getKey(), entry.getValue());} } if (ssl) {httpPost.setConfig(requestConfig); } MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 選擇以file形式上傳 if (file != null && file.exists()) {if (StringUtil.isNotBlank(fileName)) { builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, file, ContentType.DEFAULT_BINARY, fileName);}else { builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, file);} } // 以流上傳 else if (in != null && StringUtil.isNotBlank(fileName)) {builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, in, ContentType.DEFAULT_BINARY, fileName); } if (paramMap != null && !paramMap.isEmpty()) {for (Map.Entry<String, String> entry : paramMap.entrySet()) { builder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.TEXT_PLAIN));} } HttpEntity reqEntity = builder.build(); httpPost.setEntity(reqEntity); response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); if (entity != null) {result = EntityUtils.toString(entity, 'UTF-8'); } else {result = response.getStatusLine().getStatusCode() + ''; }}catch (Exception e) { e.printStackTrace();}finally { if (response != null) {try { EntityUtils.consume(response.getEntity());}catch (IOException e) { e.printStackTrace();} }}return result; } private static String getCookie(HttpResponse httpResponse) {Map<String, String> cookieMap = new HashMap<String, String>(64);Header headers[] = httpResponse.getHeaders('Set-Cookie');if (headers == null || headers.length == 0) { return null;}String cookie = '';for (int i = 0; i < headers.length; i++) { cookie += headers[i].getValue(); if (i != headers.length - 1) {cookie += ';'; }}String cookies[] = cookie.split(';');for (String c : cookies) { c = c.trim(); if (cookieMap.containsKey(c.split('=')[0])) {cookieMap.remove(c.split('=')[0]); } cookieMap.put(c.split('=')[0], c.split('=').length == 1 ? '' : (c.split('=').length == 2 ? c.split('=')[1] : c.split('=', 2)[1]));}String cookiesTmp = '';for (String key : cookieMap.keySet()) { cookiesTmp += key + '=' + cookieMap.get(key) + ';';}return cookiesTmp.substring(0, cookiesTmp.length() - 2); } /** * 創建SSL安全連接 * * @return */ public static SSLConnectionSocketFactory createSSLConnSocketFactory() {SSLConnectionSocketFactory sslsf = null;try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true;} }).build(); sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() { @Overridepublic boolean verify(String arg0, SSLSession arg1) { return true;} });}catch (GeneralSecurityException e) { e.printStackTrace();}return sslsf; } public static PoolingHttpClientConnectionManager getConnMgr() {return connMgr; } public static RequestConfig getRequestConfig() {return requestConfig; } private static boolean isSSL(String apiUrl) {if (apiUrl.indexOf('https') != -1 ) { return true;}else { return false;} } }

以上就是Java 發送http請求(get、post)的示例的詳細內容,更多關于Java 發送http請求的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产乱理伦片在线观看夜一区| 69精品人人人人| 欧美日韩一区成人| 久久精品亚洲乱码伦伦中文| 国产高清一区日本| 欧美最猛黑人xxxxx猛交| 亚洲综合图片区| 国产精品亚洲专一区二区三区| 91久久香蕉国产日韩欧美9色| 伊人色综合久久天天| 亚洲国产免费看| 亚洲欧洲综合另类| 136国产福利精品导航网址| 2022国产精品视频| 成人黄色一级视频| 91精品国产入口在线| 亚洲精选91| 亚洲男同性视频| 亚洲福利国产| 亚洲视频在线一区二区| 亚洲性色视频| 国产精品国产自产拍高清av王其| 欧美一区二区三区另类| 久久久久久夜精品精品免费| 99久久精品国产一区| 久久人人97超碰com| 99在线精品一区二区三区| 久久婷婷久久一区二区三区| 成人精品电影在线观看| 欧美变态tickle挠乳网站| av网站免费线看精品| 久久久久国产精品人| 99久久精品国产导航| 国产亚洲欧美日韩日本| 欧美成人69av| 一区在线中文字幕| 正在播放亚洲| 日韩不卡一区二区三区| 欧美中文字幕一二三区视频| 久久国产精品色婷婷| 欧美精品一二三区| 丁香另类激情小说| 国产午夜精品理论片a级大结局| 99riav一区二区三区| 国产精品五月天| 亚洲激情婷婷| 亚洲成人动漫在线免费观看| 色噜噜狠狠成人网p站| 麻豆成人免费电影| 欧美一级视频精品观看| 91麻豆国产自产在线观看| 国产精品乱码一区二区三区软件| 亚洲国产精品久久久久久女王| 一区二区三区四区av| 老牛嫩草一区二区三区日本 | 1024成人网| 国产精品区二区三区日本| 奇米精品一区二区三区四区 | 色婷婷久久久亚洲一区二区三区| 精品夜夜嗨av一区二区三区| 精品国产自在久精品国产| 亚洲高清精品中出| 日韩av在线发布| 欧美草草影院在线视频| 精品成人免费| 看电影不卡的网站| 国产日韩欧美激情| 免费看亚洲片| 国产在线不卡一区| 亚洲国产精品99久久久久久久久 | 亚洲午夜高清视频| 午夜一区二区三区在线观看| 欧美日韩夫妻久久| 91蜜桃网址入口| 亚洲成人激情综合网| 欧美一区二区三区四区视频| 欧美日韩福利| 日韩中文字幕91| 久久综合九色综合97婷婷女人| 99热免费精品| 国产精品资源在线看| 中文字幕电影一区| 色综合久久久久综合体| 成人av手机在线观看| 一区二区三区电影在线播| 欧美精品18+| 91久久黄色| 国产乱子轮精品视频| 国产精品欧美一区喷水| 色吧成人激情小说| 欧美日韩一区综合| 久久99精品国产麻豆婷婷| 国产欧美一区二区三区网站| 久久国产直播| 97se狠狠狠综合亚洲狠狠| 婷婷成人激情在线网| 国产亚洲婷婷免费| 欧美日韩在线播| 999在线观看精品免费不卡网站| 国产精品影音先锋| 亚洲最新视频在线播放| 精品久久久久久久久久久久久久久| 亚洲一级在线| a亚洲天堂av| 日本欧美一区二区在线观看| 国产精品视频yy9299一区| 51久久夜色精品国产麻豆| 在线一区日本视频| 欧美在线日韩精品| 国产伦理精品不卡| 午夜久久电影网| 26uuu久久综合| 欧美性大战久久久| 亚洲精品社区| 99久久精品国产一区| 久久99国产精品成人| 亚洲视频免费看| 日韩午夜激情免费电影| 免费在线成人| 国产在线欧美日韩| 成人午夜视频网站| 久久国产精品99精品国产 | 亚洲国产精品久久久男人的天堂| wwww国产精品欧美| 在线欧美日韩国产| 亚洲人成免费| 欧美ab在线视频| 国产福利一区在线| 美女视频黄频大全不卡视频在线播放| 国产精品午夜电影| 精品久久免费看| 欧美日韩高清一区二区三区| 欧美亚洲免费| 亚洲三级免费| 国产精品vip| 91免费视频观看| 国产乱淫av一区二区三区| 日本少妇一区二区| 亚洲福利一区二区| 亚洲欧美日韩国产手机在线 | 亚洲在线电影| 亚洲黄色视屏| 欧美日韩在线精品一区二区三区| 国产宾馆实践打屁股91| 久久成人羞羞网站| 日本视频一区二区三区| 亚洲综合一二区| 中文字幕一区二区三区av| 久久九九99视频| 精品乱码亚洲一区二区不卡| 欧美日韩你懂的| 在线视频一区二区免费| 久久裸体视频| 久久精品卡一| 久久国产精品久久久久久电车| 国产欧美日韩| 国产日韩三区| 日韩亚洲视频在线| 亚洲国产精品一区在线观看不卡| 欧美日韩精品一区| 欧美视频网站| 欧美视频日韩| 激情视频一区二区| 亚洲国内欧美| 在线亚洲自拍| 久久aⅴ国产紧身牛仔裤| 国产精品日韩欧美一区| 国产精品乱子乱xxxx| 国产精品久久久久久久久久妞妞 | 91精品国产福利| 欧美一区二区三区在线看| 欧美另类z0zxhd电影| 欧美放荡的少妇| 欧美一区二区三区四区高清| 欧美一区欧美二区| 欧美va亚洲va香蕉在线| 精品国产一区二区三区久久影院| 日韩一级二级三级精品视频| 日韩一区二区三区免费观看| 欧美成人vps| 久久久精品日韩欧美| 国产精品网站在线| 亚洲日本在线天堂| 亚洲一二三区在线观看| 五月婷婷激情综合| 另类综合日韩欧美亚洲| 国产精品一区二区在线观看不卡| 成人综合婷婷国产精品久久蜜臀 | 一本不卡影院| 色悠久久久久综合欧美99| 欧美色网站导航| 日韩一级片网址| 欧美国产一区二区在线观看| 综合欧美一区二区三区| 亚洲国产综合在线| 久久精品999| av高清不卡在线| 国精品一区二区三区| 亚洲一区二区动漫| 欧美在线你懂得|