日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解HTTP协议中的multipart/form-data

發(fā)布時(shí)間:2024/4/11 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解HTTP协议中的multipart/form-data 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前提

之前在寫一個(gè)通用HTTP組件的時(shí)候遇到過媒體(Media)類型multipart/form-data的封裝問題,這篇文章主要簡單介紹一下HTTP協(xié)議中媒體類型multipart/form-data的定義、應(yīng)用和簡單實(shí)現(xiàn)。

multipart/form-data的定義

媒體類型multipart/form-data遵循multipart MIME數(shù)據(jù)流定義(該定義可以參考Section 5.1 - RFC2046),大概含義就是:媒體類型multipart/form-data的數(shù)據(jù)體由多個(gè)部分組成,這些部分由一個(gè)固定邊界值(Boundary)分隔。

multipart/form-data請(qǐng)求體布局

multipart/form-data請(qǐng)求體的布局如下:

# 請(qǐng)求頭 - 這個(gè)是必須的,需要指定Content-Type為multipart/form-data,指定唯一邊界值 Content-Type: multipart/form-data; boundary=${Boundary}# 請(qǐng)求體 --${Boundary} Content-Disposition: form-data; name="name of file" Content-Type: application/octet-streambytes of file --${Boundary} Content-Disposition: form-data; name="name of pdf"; filename="pdf-file.pdf" Content-Type: application/octet-streambytes of pdf file --${Boundary} Content-Disposition: form-data; name="key" Content-Type: text/plain;charset=UTF-8text encoded in UTF-8 --${Boundary}--

媒體類型multipart/form-data相對(duì)于其他媒體類型如application/x-www-form-urlencoded等來說,最明顯的不同點(diǎn)是:

  • 請(qǐng)求頭的Content-Type屬性除了指定為multipart/form-data,還需要定義boundary參數(shù)
  • 請(qǐng)求體中的請(qǐng)求行數(shù)據(jù)是由多部分組成,boundary參數(shù)的值模式--${Boundary}用于分隔每個(gè)獨(dú)立的分部
  • 每個(gè)部分必須存在請(qǐng)求頭Content-Disposition: form-data; name="${PART_NAME}";,這里的${PART_NAME}需要進(jìn)行URL編碼,另外filename字段可以使用,用于表示文件的名稱,但是其約束性比name屬性低(因?yàn)椴⒉淮_認(rèn)本地文件是否可用或者是否有異議)
  • 每個(gè)部分可以單獨(dú)定義Content-Type和該部分的數(shù)據(jù)體
  • 請(qǐng)求體以boundary參數(shù)的值模式--${Boundary}--作為結(jié)束標(biāo)志

{% note warning flat %} RFC7578中提到兩個(gè)multipart/form-data過期的使用方式,其一是Content-Transfer-Encoding請(qǐng)求頭的使用,這里也不展開其使用方式,其二是請(qǐng)求體中單個(gè)表單屬性傳輸多個(gè)二進(jìn)制文件的方式建議換用multipart/mixed(一個(gè)"name"對(duì)應(yīng)多個(gè)二進(jìn)制文件的場景) {% endnote %}

特殊地:

  • 如果某個(gè)部分的內(nèi)容為文本,其的Content-Type為text/plain,可指定對(duì)應(yīng)的字符集,如Content-Type: text/plain;charset=UTF-8
  • 可以通過_charset_屬性指定默認(rèn)的字符集,用法如下:
Content-Disposition: form-data; name="_charset_"UTF-8 --ABCDE-- Content-Disposition: form-data; name="field"...text encoded in UTF-8... ABCDE--

Boundary參數(shù)取值規(guī)約

Boundary參數(shù)取值規(guī)約如下:

  • Boundary的值必須以英文中間雙橫杠--開頭,這個(gè)--稱為前導(dǎo)連字符
  • Boundary的值除了前導(dǎo)連字符以外的部分不能超過70個(gè)字符
  • Boundary的值不能包含HTTP協(xié)議或者URL禁用的特殊意義的字符,例如英文冒號(hào):等
  • 每個(gè)--${Boundary}之前默認(rèn)強(qiáng)制必須為CRLF,如果某一個(gè)部分的文本類型請(qǐng)求體以CRLF結(jié)尾,那么在請(qǐng)求體的二級(jí)制格式上,必須顯式存在兩個(gè)CRLF,如果某一個(gè)部分的請(qǐng)求體不以CRLF結(jié)尾,可以只存在一個(gè)CRLF,這兩種情況分別稱為分隔符的顯式類型和隱式類型,說的比較抽象,見下面的例子:
# 請(qǐng)求頭 Content-type: multipart/data; boundary="--abcdefg"--abcdefg Content-Disposition: form-data; name="x" Content-type: text/plain; charset=asciiIt does NOT end with a linebreak # <=== 這里沒有CRLF,隱式類型 --abcdefg Content-Disposition: form-data; name="y" Content-type: text/plain; charset=asciiIt DOES end with a linebreak # <=== 這里有CRLF,顯式類型--abcdefg## 直觀看隱式類型的CRLF It does NOT end with a linebreak CRLF --abcdefg## 直觀看顯式類型的CRLF It DOES end with a linebreak CRLF CRLF --abcdefg

實(shí)現(xiàn)multipart/form-data媒體類型的POST請(qǐng)求

這里只針對(duì)低JDK版本的HttpURLConnection和高JDK版本內(nèi)置的HttpClient編寫multipart/form-data媒體類型的POST請(qǐng)求的HTTP客戶端,其他如自定義Socket實(shí)現(xiàn)可以依照類似的思路完成。先引入org.springframework.boot:spring-boot-starter-web:2.6.0做一個(gè)簡單的控制器方法:

@RestController public class TestController {@PostMapping(path = "/test")public ResponseEntity<?> test(MultipartHttpServletRequest request) {return ResponseEntity.ok("ok");} }

Postman的模擬請(qǐng)求如下:

后臺(tái)控制器得到的請(qǐng)求參數(shù)如下:

后面編寫的客戶端可以直接調(diào)用此接口進(jìn)行調(diào)試。

封裝請(qǐng)求體轉(zhuǎn)換為字節(jié)容器的模塊

這里的邊界值全用顯式實(shí)現(xiàn),邊界值直接用固定前綴加上UUID生成即可。簡單實(shí)現(xiàn)過程中做了一些簡化:

  • 只考慮提交文本表單數(shù)據(jù)和二進(jìn)制(文件)表單數(shù)據(jù)
  • 基于上一點(diǎn),每個(gè)部分都明確指定Content-Type這個(gè)請(qǐng)求頭
  • 文本編碼固定為UTF-8

編寫一個(gè)MultipartWriter:

public class MultipartWriter {private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;private static final byte[] FIELD_SEP = ": ".getBytes(StandardCharsets.ISO_8859_1);private static final byte[] CR_LF = "\r\n".getBytes(StandardCharsets.ISO_8859_1);private static final String TWO_HYPHENS_TEXT = "--";private static final byte[] TWO_HYPHENS = TWO_HYPHENS_TEXT.getBytes(StandardCharsets.ISO_8859_1);private static final String CONTENT_DISPOSITION_KEY = "Content-Disposition";private static final String CONTENT_TYPE_KEY = "Content-Type";private static final String DEFAULT_CONTENT_TYPE = "multipart/form-data; boundary=";private static final String DEFAULT_BINARY_CONTENT_TYPE = "application/octet-stream";private static final String DEFAULT_TEXT_CONTENT_TYPE = "text/plain;charset=UTF-8";private static final String DEFAULT_CONTENT_DISPOSITION_VALUE = "form-data; name=\"%s\"";private static final String FILE_CONTENT_DISPOSITION_VALUE = "form-data; name=\"%s\"; filename=\"%s\"";private final Map<String, String> headers = new HashMap<>(8);private final List<AbstractMultipartPart> parts = new ArrayList<>();private final String boundary;private MultipartWriter(String boundary) {this.boundary = Objects.isNull(boundary) ? TWO_HYPHENS_TEXT +UUID.randomUUID().toString().replace("-", "") : boundary;this.headers.put(CONTENT_TYPE_KEY, DEFAULT_CONTENT_TYPE + this.boundary);}public static MultipartWriter newMultipartWriter(String boundary) {return new MultipartWriter(boundary);}public static MultipartWriter newMultipartWriter() {return new MultipartWriter(null);}public MultipartWriter addHeader(String key, String value) {if (!CONTENT_TYPE_KEY.equalsIgnoreCase(key)) {headers.put(key, value);}return this;}public MultipartWriter addTextPart(String name, String text) {parts.add(new TextPart(String.format(DEFAULT_CONTENT_DISPOSITION_VALUE, name), DEFAULT_TEXT_CONTENT_TYPE, this.boundary, text));return this;}public MultipartWriter addBinaryPart(String name, byte[] bytes) {parts.add(new BinaryPart(String.format(DEFAULT_CONTENT_DISPOSITION_VALUE, name), DEFAULT_BINARY_CONTENT_TYPE, this.boundary, bytes));return this;}public MultipartWriter addFilePart(String name, File file) {parts.add(new FilePart(String.format(FILE_CONTENT_DISPOSITION_VALUE, name, file.getName()), DEFAULT_BINARY_CONTENT_TYPE, this.boundary, file));return this;}private static void writeHeader(String key, String value, OutputStream out) throws IOException {writeBytes(key, out);writeBytes(FIELD_SEP, out);writeBytes(value, out);writeBytes(CR_LF, out);}private static void writeBytes(String text, OutputStream out) throws IOException {out.write(text.getBytes(DEFAULT_CHARSET));}private static void writeBytes(byte[] bytes, OutputStream out) throws IOException {out.write(bytes);}interface MultipartPart {void writeBody(OutputStream os) throws IOException;}@RequiredArgsConstructorpublic static abstract class AbstractMultipartPart implements MultipartPart {protected final String contentDispositionValue;protected final String contentTypeValue;protected final String boundary;protected String getContentDispositionValue() {return contentDispositionValue;}protected String getContentTypeValue() {return contentTypeValue;}protected String getBoundary() {return boundary;}public final void write(OutputStream out) throws IOException {writeBytes(TWO_HYPHENS, out);writeBytes(getBoundary(), out);writeBytes(CR_LF, out);writeHeader(CONTENT_DISPOSITION_KEY, getContentDispositionValue(), out);writeHeader(CONTENT_TYPE_KEY, getContentTypeValue(), out);writeBytes(CR_LF, out);writeBody(out);writeBytes(CR_LF, out);}}public static class TextPart extends AbstractMultipartPart {private final String text;public TextPart(String contentDispositionValue,String contentTypeValue,String boundary,String text) {super(contentDispositionValue, contentTypeValue, boundary);this.text = text;}@Overridepublic void writeBody(OutputStream os) throws IOException {os.write(text.getBytes(DEFAULT_CHARSET));}@Overrideprotected String getContentDispositionValue() {return contentDispositionValue;}@Overrideprotected String getContentTypeValue() {return contentTypeValue;}}public static class BinaryPart extends AbstractMultipartPart {private final byte[] content;public BinaryPart(String contentDispositionValue,String contentTypeValue,String boundary,byte[] content) {super(contentDispositionValue, contentTypeValue, boundary);this.content = content;}@Overridepublic void writeBody(OutputStream out) throws IOException {out.write(content);}}public static class FilePart extends AbstractMultipartPart {private final File file;public FilePart(String contentDispositionValue,String contentTypeValue,String boundary,File file) {super(contentDispositionValue, contentTypeValue, boundary);this.file = file;}@Overridepublic void writeBody(OutputStream out) throws IOException {try (InputStream in = new FileInputStream(file)) {final byte[] buffer = new byte[4096];int l;while ((l = in.read(buffer)) != -1) {out.write(buffer, 0, l);}out.flush();}}}public void forEachHeader(BiConsumer<String, String> consumer) {headers.forEach(consumer);}public void write(OutputStream out) throws IOException {if (!parts.isEmpty()) {for (AbstractMultipartPart part : parts) {part.write(out);}}writeBytes(TWO_HYPHENS, out);writeBytes(this.boundary, out);writeBytes(TWO_HYPHENS, out);writeBytes(CR_LF, out);} }

這個(gè)類已經(jīng)封裝好三種不同類型的部分請(qǐng)求體實(shí)現(xiàn),forEachHeader()方法用于遍歷請(qǐng)求頭,而最終的write()方法用于把請(qǐng)求體寫入到OutputStream中。

HttpURLConnection實(shí)現(xiàn)

實(shí)現(xiàn)代碼如下(只做最簡實(shí)現(xiàn),沒有考慮容錯(cuò)和異常處理):

public class HttpURLConnectionApp {private static final String URL = "http://localhost:9099/test";public static void main(String[] args) throws Exception {MultipartWriter writer = MultipartWriter.newMultipartWriter();writer.addTextPart("name", "throwable").addTextPart("domain", "vlts.cn").addFilePart("ico", new File("I:\\doge_favicon.ico"));DataOutputStream requestPrinter = new DataOutputStream(System.out);writer.write(requestPrinter);HttpURLConnection connection = (HttpURLConnection) new java.net.URL(URL).openConnection();connection.setRequestMethod("POST");connection.addRequestProperty("Connection", "Keep-Alive");// 設(shè)置請(qǐng)求頭writer.forEachHeader(connection::addRequestProperty);connection.setDoInput(true);connection.setDoOutput(true);connection.setConnectTimeout(10000);connection.setReadTimeout(10000);DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 設(shè)置請(qǐng)求體writer.write(out);StringBuilder builder = new StringBuilder();BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));String line;while (Objects.nonNull(line = reader.readLine())) {builder.append(line);}int responseCode = connection.getResponseCode();reader.close();out.close();connection.disconnect();System.out.printf("響應(yīng)碼:%d,響應(yīng)內(nèi)容:%s\n", responseCode, builder);} }

執(zhí)行響應(yīng)結(jié)果:

響應(yīng)碼:200,響應(yīng)內(nèi)容:ok

可以嘗試加入兩行代碼打印請(qǐng)求體:

MultipartWriter writer = MultipartWriter.newMultipartWriter(); writer.addTextPart("name", "throwable").addTextPart("domain", "vlts.cn").addFilePart("ico", new File("I:\\doge_favicon.ico")); DataOutputStream requestPrinter = new DataOutputStream(System.out); writer.write(requestPrinter);

控制臺(tái)輸出如下;

JDK內(nèi)置HttpClient實(shí)現(xiàn)

JDK11+內(nèi)置了HTTP客戶端實(shí)現(xiàn),具體入口是java.net.http.HttpClient,實(shí)現(xiàn)編碼如下:

public class HttpClientApp {private static final String URL = "http://localhost:9099/test";public static void main(String[] args) throws Exception {HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.of(10, ChronoUnit.SECONDS)).build();MultipartWriter writer = MultipartWriter.newMultipartWriter();writer.addTextPart("name", "throwable").addTextPart("domain", "vlts.cn").addFilePart("ico", new File("I:\\doge_favicon.ico"));ByteArrayOutputStream out = new ByteArrayOutputStream();writer.write(out);HttpRequest.Builder requestBuilder = HttpRequest.newBuilder();writer.forEachHeader(requestBuilder::header);HttpRequest request = requestBuilder.uri(URI.create(URL)).method("POST", HttpRequest.BodyPublishers.ofByteArray(out.toByteArray())).build();HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());System.out.printf("響應(yīng)碼:%d,響應(yīng)內(nèi)容:%s\n", response.statusCode(), response.body());} }

內(nèi)置的HTTP組件幾乎都是使用Reactive編程模型,使用的API都是相對(duì)底層,靈活性比較高但是易用性不高。

小結(jié)

媒體類型multipart/form-data常用于POST方法下的HTTP請(qǐng)求,至于作為HTTP響應(yīng)的場景相對(duì)少見。

總結(jié)

以上是生活随笔為你收集整理的理解HTTP协议中的multipart/form-data的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

天天久久夜夜 | 色婷婷综合久久久久中文字幕1 | 日本久久免费电影 | 福利视频一区二区 | 精品福利视频在线观看 | av中文在线影视 | 日本黄色大片免费 | 国产午夜精品福利视频 | 日日夜夜精品免费 | 91丨九色丨高潮丰满 | 4438全国亚洲精品观看视频 | 91九色国产 | 91成人在线视频观看 | 伊人影院av | 久久激情电影 | 欧美精品乱码久久久久久 | 中文在线a∨在线 | 在线观看mv的中文字幕网站 | 日韩视频免费 | 少妇自拍av | 久久久久久久久久久综合 | 一级特黄aaa大片在线观看 | 久久午夜网 | 国产黄色a| 久久久久久草 | 最新久久久 | 午夜影院三级 | 高清av免费观看 | 黄色一级在线视频 | 波多野结依在线观看 | 最近中文字幕高清字幕免费mv | 国产精品久久久久久a | 开心激情五月网 | 就要干b | 日韩中文字幕a | 成人免费观看网站 | 国产视频精品久久 | 国产精品一区在线观看 | 中文av不卡 | www.激情五月.com | 日韩av免费一区 | 国产色视频一区二区三区qq号 | 99这里有精品 | 激情九九| 国产午夜精品免费一区二区三区视频 | 久久影院一区 | 日韩在线免费观看视频 | 国产亚洲日 | 亚洲天天综合网 | 正在播放亚洲精品 | 久久久91精品国产 | 国产在线a不卡 | 在线观看你懂的网站 | 午夜成人免费电影 | 一区二区三区久久 | 在线免费观看黄色大片 | 在线成人免费电影 | 久草在线视频网站 | 国产精品视频999 | 国产精品一区二区免费看 | 不卡的av在线播放 | 色丁香久久 | 国产一区免费观看 | av久久在线 | 在线观看蜜桃视频 | 国产剧情一区 | 免费特级黄色片 | 四川bbb搡bbb爽爽视频 | 天天色播 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 91精品在线观看入口 | 中文字幕在线不卡国产视频 | 五月天天天操 | 中文字幕第一页av | 色欧美88888久久久久久影院 | 亚州精品国产 | 九九有精品| 色综合久久久久久久 | 欧美成年人在线视频 | 成人国产精品久久久久久亚洲 | 2021国产视频 | 黄污在线观看 | 伊人超碰在线 | 99精品视频在线观看播放 | 色婷婷中文 | 女人高潮一级片 | 国产黄色在线网站 | 免费看成人片 | 99精品免费久久久久久日本 | 99久久综合狠狠综合久久 | 久久免费播放视频 | 精品久久久久久综合日本 | 91av视频免费观看 | 国产 日韩 欧美 在线 | 国产在线精品二区 | 亚洲成人精品 | 亚洲精品在线一区二区 | 亚洲免费激情 | 成人一级免费视频 | 婷婷色在线 | 欧美性大战久久久久 | 亚洲国内精品在线 | a一片一级 | 免费看黄在线网站 | 最近中文字幕 | 亚洲视频免费在线 | 精品视频久久 | 亚洲黄色免费 | 午夜电影中文字幕 | 五月天中文字幕mv在线 | 久久久久久久久久久免费视频 | 成人免费91| 中文在线天堂资源 | 最新日韩视频在线观看 | 国产99久久久国产 | 天天操天天操天天爽 | 天天干天天做天天爱 | 91精品一 | 久久在线视频精品 | 国产精品嫩草影院9 | 日韩精品免费一线在线观看 | 亚洲免费永久精品国产 | 欧美日韩免费一区二区三区 | av中文字幕网址 | 国产亲近乱来精品 | 婷婷福利影院 | 久久久高清一区二区三区 | 免费国产一区二区 | 又粗又长又大又爽又黄少妇毛片 | 黄色影院在线免费观看 | 97色在线观看免费视频 | 久久久久久久影视 | 亚洲国产中文字幕在线 | 天堂入口网站 | 免费a网址 | 久草.com| 天堂视频中文在线 | 亚洲伦理一区二区 | 天天射天天干天天插 | 午夜视频在线观看一区二区三区 | 91在线精品观看 | 天天射天天射天天射 | 91福利在线导航 | 中文字幕丰满人伦在线 | 在线亚洲人成电影网站色www | 黄色www免费 | 夜夜爱av| 久久精品视频在线观看免费 | 中文字幕国产亚洲 | 国产99久久久国产精品 | 99久久精品无免国产免费 | 91专区在线观看 | 日韩精品在线观看av | 婷婷丁香激情五月 | 亚洲三级av | 亚洲最新av网站 | 精品爱爱 | 国产网站在线免费观看 | 91九色成人 | 欧美日性视频 | 天天玩夜夜操 | 国产精品一区欧美 | 国产精品一区二区免费看 | 天天操天天干天天摸 | 成人性生活大片 | 激情网色| 黄色视屏在线免费观看 | 最近中文字幕mv免费高清在线 | 国产精品永久久久久久久www | 国产区免费在线 | 免费看色网站 | 午夜国产福利在线观看 | 激情久久小说 | 国产精品视屏 | 亚洲精品永久免费视频 | 性色在线视频 | 911亚洲精品第一 | 五月婷婷国产 | 4438全国亚洲精品观看视频 | 欧美肥妇free | 日韩1页| 探花视频在线版播放免费观看 | 五月天久久久久 | 天天操偷偷干 | 欧美日韩午夜 | 国产看片网站 | 国产精品视频 | 久久在现 | 久久综合九色99 | 亚洲国产精品视频在线观看 | 国产午夜视频在线观看 | 在线观看国产亚洲 | 欧美午夜一区二区福利视频 | 日韩在线视频一区 | 手机av永久免费 | 欧洲av在线 | 日韩激情久久 | 久av在线| 深爱激情五月网 | 国产亚洲激情视频在线 | 免费在线一区二区 | 久久论理| 久久精品一区二区国产 | 亚洲手机天堂 | 丁香花在线观看视频在线 | 99精品国产高清在线观看 | 亚洲精品乱码久久久一二三 | 欧美日韩久久久 | 色综合久久88色综合天天免费 | 国产成人一区三区 | 亚洲黄色a | 91久久黄色 | 国产无套精品久久久久久 | 亚洲精品国产拍在线 | 97在线视频免费 | 91在线免费视频 | 国产精品福利无圣光在线一区 | 国产精品麻豆果冻传媒在线播放 | 狠狠操夜夜 | 奇米影音四色 | 97免费中文视频在线观看 | 91精品国产九九九久久久亚洲 | 久久久亚洲麻豆日韩精品一区三区 | 婷婷视频在线观看 | 国产一级免费在线观看 | 色婷婷亚洲精品 | 在线小视频国产 | 日韩精品欧美专区 | 99久久久久久 | 99免费看片| aav在线| 久久久久久久毛片 | www.久久久.com | 九九免费观看全部免费视频 | 国产精品美女久久久久久2018 | 亚州激情视频 | 国产日韩在线播放 | 国产精品免费成人 | 免费av一级电影 | 成人香蕉视频 | 欧美最猛性xxxx | 黄色小说视频在线 | 911免费视频| 国产成人免费在线 | 久久综合视频网 | 欧美91视频| 免费一级特黄录像 | 天天操天天射天天操 | av看片网址| 精品一区二区三区久久久 | 激情xxxx| 久久特级毛片 | 日本中文字幕影院 | 久久久久久中文字幕 | 9999激情 | 美女精品在线 | 国产一级视频在线观看 | 久久免费视频一区 | 日韩三级精品 | 天天久久综合 | 久久久久国 | 天堂av在线网站 | 国产精品午夜久久久久久99热 | av高清影院 | 三级视频日韩 | 久久国产免费看 | 美女在线观看网站 | 欧美日韩视频一区二区 | 国产手机在线精品 | 中文字幕在线视频免费播放 | 国产视频综合在线 | 91热在线| 1000部18岁以下禁看视频 | 黄色av一级 | 五月婷婷综 | 欧美激情第八页 | 国产一区精品在线 | 国产精品久久综合 | 一本一本久久a久久 | 精品久久久免费 | 成人在线一区二区 | 国产亚洲精品久 | 最近免费中文字幕mv在线视频3 | 久久国产区 | 天堂中文在线视频 | 日韩专区在线 | 日韩午夜高清 | 国产精品电影在线 | 超碰人人超 | 91在线视频观看 | 香蕉网在线观看 | 亚洲精品美女免费 | 天天操天天艹 | 国产精品入口麻豆 | 久久丁香网| 久久尤物电影视频在线观看 | av在线影片 | 在线免费观看国产精品 | 69热国产视频 | 999成人免费视频 | 亚洲视频电影在线 | 婷五月激情 | 国产成人精品日本亚洲999 | 久久久久欧美精品 | www.888av| 激情开心| 欧美精品黑人性xxxx | 91亚洲精品在线观看 | 国产三级香港三韩国三级 | 成人欧美一区二区三区在线观看 | 国产精品免费久久 | 国产精品久久久久久超碰 | 国产免费片 | 久久五月情影视 | 亚洲精色| 亚洲精品黄色片 | 国产 亚洲 欧美 在线 | 婷婷av电影| 在线国产99 | 亚洲综合视频在线 | 国产高清精品在线 | 久草免费新视频 | 亚洲免费av片 | 国产69久久久欧美一级 | 波多野结衣一区三区 | 久久99日韩 | 99精品国产99久久久久久97 | 亚洲中字幕 | 96精品高清视频在线观看软件特色 | 欧美乱淫视频 | 国产免费大片 | 久久久精品久久日韩一区综合 | 久久色中文字幕 | 91tv国产成人福利 | 国产精品美女久久久 | 欧美极品一区二区三区 | 97国产精品视频 | 久久短视频 | 九九热在线视频 | 国产精品久久久久久久免费 | 国产精品黑丝在线观看 | 在线一区av | 天天人人| 亚洲国产精品电影在线观看 | 99视频精品免费视频 | 香蕉视频在线网站 | 国产精品久久麻豆 | 亚洲一级影院 | 免费观看av | 成人宗合网 | 狠狠色丁香久久婷婷综 | 开心激情五月网 | 欧美日韩不卡在线观看 | 国产精品v欧美精品v日韩 | 久草影视在线观看 | 91日韩精品视频 | 69av视频在线 | 天天综合狠狠精品 | 亚洲久草网 | 国产精品久久久久久久久久妇女 | 日本狠狠干 | 亚洲成人一二三 | 狠狠88综合久久久久综合网 | 亚洲理论视频 | 黄色福利网 | 天天操天天干天天综合网 | 日本中文一区二区 | 日本韩国精品一区二区在线观看 | 在线三级中文 | 在线亚洲天堂网 | 人人草在线视频 | 国际精品久久 | 午夜影视av | 精品久久久国产 | 九九在线高清精品视频 | 免费国产在线观看 | 久久亚洲视频 | 国产精品剧情在线亚洲 | 国产精品久久一卡二卡 | 久久视影 | 国产日韩欧美在线观看视频 | 天堂va在线高清一区 | 狠狠色噜噜狠狠狠狠2021天天 | 国内外成人在线 | 99精品视频免费看 | 成人在线黄色 | 永久免费看av | 999毛片| 久久久久久久久久久网站 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 97电影院网| 久久久成人精品 | 国产精品自在欧美一区 | 成人av在线直播 | 国产粉嫩在线 | 日韩av成人在线观看 | 国产中文欧美日韩在线 | 中文字幕免费成人 | 免费成人在线网站 | 天天性天天草 | 亚洲国产精品成人va在线观看 | 久久人人添人人爽添人人88v | 国产成人一区二区啪在线观看 | 午夜影视一区 | 最近中文字幕第一页 | 欧美a在线免费观看 | 热久久影视 | 日韩理论电影网 | 国产伦精品一区二区三区四区视频 | 午夜av一区二区三区 | 国产黄色片一级 | 香蕉视频国产在线 | 免费av影视| 国产精品久久久久久久免费观看 | 18女毛片 | 伊人婷婷激情 | 国产福利一区二区三区在线观看 | 国产一级片免费观看 | 久久久久国产精品免费网站 | 中文在线中文资源 | 麻豆一精品传二传媒短视频 | 99c视频在线 | 91成品人影院 | 91视频在线自拍 | 国产99在线播放 | 麻豆传媒视频观看 | 激情丁香 | 中文字幕在线免费97 | 欧美在线观看视频一区二区三区 | 成年人黄色免费网站 | 成人三级黄色 | 亚洲国内精品视频 | 成人一级影视 | 激情av五月婷婷 | 天天操夜夜逼 | 亚洲精品xx| 日韩网站一区二区 | 综合网婷婷 | 国产伦理久久精品久久久久_ | 天天射网站 | 亚洲高清不卡av | 国产精品久久久久四虎 | 久草视频在线免费 | 奇米影视777四色米奇影院 | 免费高清看电视网站 | 久久人人爽人人爽人人 | 亚洲欧美日韩国产一区二区三区 | 亚洲国产精品久久久久 | 亚洲电影在线看 | 91麻豆精品国产午夜天堂 | 精品国产一区二区三区久久久蜜臀 | 人人干人人干人人干 | 成 人 黄 色 视频免费播放 | 国内亚洲精品 | 国产一区二区三区免费在线观看 | 五月激情天 | 国产视频一区二区在线观看 | 久久成人毛片 | 人人澡人摸人人添学生av | 高清不卡毛片 | 日韩高清在线一区二区 | 少妇搡bbbb搡bbb搡忠贞 | 丝袜美腿在线视频 | 成人av片免费观看app下载 | 中文字幕在线观看视频一区二区三区 | 亚洲视频一区二区三区在线观看 | av女优中文字幕在线观看 | 亚洲精品电影在线 | 色综合久久久久久久久五月 | 亚洲另类视频 | 欧美一区影院 | 亚洲精品国精品久久99热一 | 麻豆一区在线观看 | 天天操天天干天天操天天干 | 亚洲精品在线观看中文字幕 | 五月天久久综合网 | 久久久久亚洲精品中文字幕 | 日韩黄色一级电影 | 国产精品亚洲片夜色在线 | 五月天天在线 | 日日射av | 国产精品久久久久久久久久免费看 | 日韩精品一区二区三区免费观看视频 | 亚洲少妇天堂 | 久草在线这里只有精品 | 亚洲成人蜜桃 | 亚欧日韩成人h片 | 久久久久免费观看 | 天天色天天色天天色 | 久久久精品欧美一区二区免费 | 国产黄色精品在线 | 国产123区在线观看 国产精品麻豆91 | 色资源中文字幕 | 日本黄色免费大片 | 日本狠狠干| 日韩免费小视频 | 久久一区国产 | 免费看av片网站 | www在线免费观看 | 九九精品视频在线观看 | 国产欧美精品一区二区三区四区 | 中文字幕高清 | 91色网址 | 五月天激情综合 | 激情自拍av | 国产亚洲片| 国产三级久久久 | 国产免费看 | 亚洲国产视频直播 | 中文网丁香综合网 | 欧美在线一级片 | 欧美日韩国产在线观看 | 日韩视频免费 | 亚洲自拍偷拍色图 | 国产不卡免费视频 | 91成人在线看 | 国产精品久久久久婷婷二区次 | 久久精品视频在线免费观看 | 99久久这里只有精品 | 三级在线视频播放 | 99久久99久久精品免费 | 波多野结衣视频一区 | 久久久免费少妇 | 国产色一区 | 一级片在线| 九九视频在线 | av中文字幕av | 97在线看片 | 亚洲欧美国产精品18p | 国产视频一区精品 | 国产丝袜 | 免费成人黄色片 | 激情综合五月网 | 不卡视频国产 | 久久手机精品视频 | 中文字幕在线观看播放 | 久草在线资源网 | 久久99国产精品免费 | www好男人| 亚洲另类视频 | 狠狠五月天 | 日本在线观看中文字幕 | 色狠狠综合天天综合综合 | 色综合天天狠天天透天天伊人 | 国产又粗又猛又色 | va视频在线观看 | 激情深爱.com| 日韩一区精品 | 99久久婷婷国产 | 亚洲国产午夜精品 | 日韩精品2区 | 超碰97国产 | 久久久久国产精品视频 | 精品亚洲午夜久久久久91 | 97超级碰| 亚洲九九精品 | 久久任你操 | 国产高清不卡在线 | 操综合| 色婷婷99| 欧美看片 | 一区精品在线 | 日韩电影精品一区 | 中文字幕在线久一本久 | 国产特级毛片aaaaaa毛片 | 一区二区三区日韩在线观看 | 免费a v在线 | 久久一本综合 | 国产精品白浆 | 天海翼一区二区三区免费 | 国产精品久久一区二区三区, | av电影 一区二区 | 99日精品| 三级小视频在线观看 | 91成品视频| 成年人网站免费在线观看 | 久香蕉| 欧美视频国产视频 | 亚洲欧美日韩精品一区二区 | 99热 精品在线 | 国产一区二区三区午夜 | 日本三级不卡 | 成人网看片 | 中文字幕韩在线第一页 | 免费a v在线 | 97精品一区二区三区 | 欧洲高潮三级做爰 | 久久久久久久久久久免费 | 美女网站黄在线观看 | 亚洲女欲精品久久久久久久18 | 国产日韩欧美自拍 | 亚洲精品中文字幕视频 | 99精品免费久久久久久久久日本 | 日本女人在线观看 | 日日躁夜夜躁aaaaxxxx | 国产精品午夜久久久久久99热 | 国产精品久久久久国产精品日日 | 国产成人av | 国产原创在线观看 | 免费情趣视频 | 91色九色| 免费视频区 | 色多多污污在线观看 | 国产片免费在线观看视频 | 色综合国产 | 国产免费黄视频在线观看 | av午夜电影 | 黄色精品国产 | 日韩午夜在线观看 | 在线观看香蕉视频 | 国产精品不卡在线观看 | 免费成人黄色片 | 欧美日韩精品二区第二页 | 久久综合九色九九 | 国产香蕉久久 | 亚洲最大在线视频 | 免费中文字幕在线观看 | 欧美大片aaa | 欧美视频二区 | 日韩三区在线 | 丁香婷婷综合激情 | 国产免费视频一区二区裸体 | 日韩在线网址 | 欧美极品少妇xxxx | 久久手机视频 | 在线观看视频一区二区三区 | 99爱这里只有精品 | 国产在线观看国语版免费 | 九九欧美 | 国产视频在线观看一区 | 美女国产在线 | 日韩视频图片 | 在线看中文字幕 | 免费成人在线观看视频 | 天天曰视频 | 一区二区三区在线播放 | 久久久久国产精品免费网站 | 97精品电影院 | 婷婷亚洲五月 | 免费黄色av片 | 亚洲精品国产精品国自产观看浪潮 | 黄av在线 | 在线观看亚洲电影 | 日本特黄一级片 | 免费网站看v片在线a | 91免费观看网站 | 日韩成人免费在线电影 | 99久久999久久久精玫瑰 | 天天色天天艹 | 日本黄色免费在线观看 | 狠狠操夜夜 | 日本久久精品 | 久久久成人精品 | 一级黄色大片在线观看 | 成人免费在线视频观看 | 激情视频综合网 | 五月婷婷香蕉 | 97超碰在线播放 | 日本三级久久久 | 欧美成人影音 | 婷婷在线免费 | 久久久久久久久国产 | 亚洲精品美女久久久久网站 | 成年人在线免费看视频 | 国产高清久久久久 | 久草在在线 | 97超碰人人在线 | 国产成人黄色在线 | 黄色精品一区 | 91大片网站 | 最近中文字幕国语免费高清6 | 亚洲欧美少妇 | 国产成人一区二区三区久久精品 | avcom在线 | 国产精品久久久久久久久久 | 婷婷六月综合亚洲 | 色偷偷88欧美精品久久久 | 精产嫩模国品一二三区 | 91天堂影院 | 97电影在线观看 | 六月婷色| 91在线看片 | 三级小视频在线观看 | 国产成人精品在线观看 | 午夜婷婷网 | 国产精品网在线观看 | 亚洲国产成人久久综合 | 免费看精品久久片 | 丁香花五月| 成人精品一区二区三区中文字幕 | 五月天狠狠操 | 欧美美女一级片 | 天天综合操 | 国产精品久久久精品 | 91免费在线播放 | 丝袜少妇在线 | 91视频麻豆视频 | av黄色av | 玖玖在线资源 | 91日韩在线播放 | 亚洲aⅴ乱码精品成人区 | 久久这里有精品 | 99r在线播放 | 日韩视频免费在线观看 | 久久精品国产美女 | 在线视频手机国产 | 97碰碰精品嫩模在线播放 | 久久久久久久久国产 | 91亚洲夫妻| 国产视频在线免费观看 | 精品在线播放 | 91久久精品日日躁夜夜躁国产 | 能在线看的av | 美女国内精品自产拍在线播放 | 午夜精品电影 | 日韩免费在线观看网站 | 日韩欧美在线视频一区二区三区 | 久久免费成人 | 在线观看中文字幕一区 | 国产精品久久久久久久av大片 | 99精品热视频只有精品10 | 视频一区二区免费 | 一区二区精品视频 | 色99视频 | 99在线观看视频网站 | 97超碰资源总站 | 国产精品入口久久 | 91网页版免费观看 | 天天操天天射天天爽 | 亚洲激情婷婷 | 亚洲精品美女久久久 | 国产精品美 | 成人四虎 | 婷婷色综 | 亚洲va欧美va人人爽 | 亚洲精品一区二区三区高潮 | 中文字幕在线日 | 欧美久久久影院 | 久久精品一区二区三 | 国产99在线播放 | 999久久久精品视频 日韩高清www | 夜夜澡人模人人添人人看 | 国产精品久久久久久久久久久久午夜片 | 精品久久久999 | 国产老妇av | 揉bbb玩bbb少妇bbb | 激情综合色播五月 | 91精品国 | 最新婷婷色 | 国产成人亚洲在线观看 | 九色视频网 | 国产中文字幕视频 | 在线观看国产高清视频 | 91九色自拍 | 97福利社 | 免费国产ww | 三级av在线播放 | 五月婷婷操 | 黄色网址中文字幕 | 综合亚洲视频 | 色99之美女主播在线视频 | 成年人免费看 | 九九热在线播放 | 日韩欧美视频在线观看免费 | 麻豆一区在线观看 | 激情综合色综合久久综合 | 在线看黄网站 | 国产大陆亚洲精品国产 | 一区二区三区在线视频观看58 | 免费黄色在线 | 一区二区欧美在线观看 | 国产一级二级三级在线观看 | 精品久久久久久久久亚洲 | 人人搞人人干 | 国产无吗一区二区三区在线欢 | 狠狠网站| 中文字幕4 | 在线国产一区 | 在线观看色网 | 免费av大片 | 国产h在线播放 | 久久久久久久久免费 | 四虎永久精品在线 | 国产精品av一区二区 | 国产精品美女久久久久久久久 | 91色一区二区三区 | 欧美色黄| 日韩在线电影 | 婷婷六月丁 | 久久久久久久久久久黄色 | 人人爽人人搞 | 欧美另类亚洲 | www.日韩免费| 亚洲资源 | 国产精品1区2区在线观看 | 婷婷精品| 国产精彩在线视频 | 伊人资源视频在线 | 在线国产精品视频 | 日韩最新av在线 | 久草精品视频在线看网站免费 | 五月婷婷在线观看 | 国产精品不卡一区 | 在线观看国产www | 狠狠色免费| 欧美国产日韩一区二区三区 | 日本中文字幕网 | 最近高清中文字幕在线国语5 | 亚洲国产精品500在线观看 | 亚洲天堂精品视频在线观看 | 成人av视屏 | 成人影视片 | 国产精品国内免费一区二区三区 | 91精品国产麻豆 | 国产黄色看片 | 一区二区视频在线播放 | 国产亚洲成av片在线观看 | 97在线观 | 最新日韩在线观看视频 | 综合天天网| 91视频免费 | 亚洲精品国偷自产在线91正片 | 亚洲精品字幕在线 | 黄色精品久久 | 国产99久久九九精品免费 | 国产97在线播放 | 日韩天天干 | 国产精品一区二区精品视频免费看 | 亚洲天堂网站 | 日韩欧美在线影院 | 超级碰视频 | 特级西西444www大精品视频免费看 | 日韩欧美视频二区 | 福利一区在线视频 | 日韩色一区二区三区 | 中文字幕资源网 国产 | 亚洲精品激情 | 国产一区二区三区免费在线观看 | 亚洲高清久久久 | 久久a热6 | 久久av观看 | av免费试看 | 久久综合九色综合97婷婷女人 | 久久免费视频精品 | 久久艹99 | av电影久久 | 国内精品在线看 | 热re99久久精品国产66热 | 中文字幕成人 | 97精品国产手机 | 91香蕉视频好色先生 | 国产精品久久久视频 | 在线看日韩 | 91九色在线视频观看 | 亚洲最大色 | 99在线观看精品 | 久草在线免费电影 | 欧美久久久久久久久久 | 日韩美视频 | 丁香婷婷色综合亚洲电影 | 国产最新在线观看 | 日韩精品1区2区 | 人人澡视频| 日韩免费 | 九九九视频在线 | 国产精品 日韩 | 亚洲精品国产精品国自产观看浪潮 | 中文字幕亚洲欧美日韩 | 欧美人zozo | 久久久久国产精品厨房 | 亚洲第一色 | 国产电影一区二区三区四区 | 亚洲激精日韩激精欧美精品 | 日韩三级视频 | 一区二区三区日韩精品 | 免费精品国产va自在自线 | 久久精品99国产精品酒店日本 | 日韩三级中文字幕 | 狠狠色丁香婷婷综合视频 | 婷婷综合激情 | 国产精品99精品 | 97综合网| 国产一区二区在线精品 | 视频在线观看91 | 日韩网站免费观看 | 天天射天天色天天干 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品嫩草影院99网站 | 国产黄色成人 | 亚洲国产精品人久久电影 | 日本中文一级片 | 在线精品亚洲一区二区 | 国产精品久久久久aaaa | 久久久99精品免费观看app | 亚洲一区黄色 | 在线视频欧美精品 | 中文字幕在线色 | 黄色a级片在线观看 | 香蕉影院在线播放 | 黄色精品一区二区 | 久久99操 | 亚洲视频一级 | 黄色在线网站噜噜噜 | 免费在线观看av网站 | 久久久久免费精品 | 午夜精品久久久久久久久久久久 | 激情丁香月 | 爱爱一区 | 麻豆av一区二区三区在线观看 | 狠狠色狠狠色综合日日92 | 国产精品中文 | 久草在线免费在线观看 | 一区二区三区在线免费播放 | 国产亚洲va综合人人澡精品 | 亚洲国产无 | 最新中文字幕在线播放 | www.狠狠操.com | 精品伊人久久久 | 日本久久久影视 | 狠狠的操你 | 狠狠干天天操 | 久久久久久久久爱 | 久久美女免费视频 | 日韩网站一区 | 久草网免费 | 成人一区二区三区在线 | 韩国一区二区三区在线观看 | 亚洲日本中文字幕在线观看 | 日韩欧美一区二区三区在线 | 中文视频在线播放 | 精品视频在线视频 | 欧美一级片在线观看视频 | 91九色精品女同系列 | 国产一区二区在线影院 | 精品毛片久久久久久 | 天天草av | 国产精品中文久久久久久久 | 亚洲精色 | 色网站在线免费观看 | 开心色插 | 欧美一区视频 | 日韩国产精品一区 | 91在线91拍拍在线91 | 亚洲一区二区高潮无套美女 | 天天草天天草 | 亚洲国产一区av | 久久一本综合 | 黄色一级大片在线免费看产 | 久久精品国产99 | 天天艹天天干天天 | 成人sm另类专区 | 在线播放 亚洲 | 国产精品videossex国产高清 | 在线成人免费av | 日韩在线观看精品 | 一级黄色片在线播放 | 日韩欧美一区二区三区在线 | 在线日韩视频 | 亚洲女人av | 久草精品资源 | 碰超在线97人人 | 免费在线观看国产黄 | 国产手机视频在线观看 | 精品视频在线视频 | 亚洲国产av精品毛片鲁大师 | 欧美成人va| 在线观看av片 | 激情五月婷婷激情 | 日韩国产欧美视频 | 91视频-88av | 天天干人人 | 成人观看| 国产精品精品国产 | 开心色插| 99精品在线免费视频 | 91在线观看高清 | 国产视频资源在线观看 | 国产精品麻豆欧美日韩ww | 91在线视频免费观看 | 在线日韩 | 黄色aaaaa | 国产精品ssss在线亚洲 | 99久久99| 欧美日韩二区在线 | 精品成人a区在线观看 | 日韩成人精品一区二区 | 黄色小说免费观看 | av丁香 | 在线国产能看的 | 爱情影院aqdy鲁丝片二区 | 国产成人精品网站 | 在线免费观看黄网站 | 97超视频在线观看 | 日韩激情av在线 | 成人不用播放器 | 婷婷六月综合亚洲 | 国产美女视频一区 | 九九热视频在线免费观看 |