2018-07-19

NSURLRequest

概述

NSURLRequest封裝了加載請(qǐng)求的兩個(gè)基本數(shù)據(jù)元素:要加載的URL,以及在查詢實(shí)現(xiàn)提供的URL內(nèi)容緩存時(shí)要使用的策略倦沧。

重要的

這個(gè)類只用于封裝關(guān)于URL請(qǐng)求的信息呈宇。您必須使用其他類(如URLSession)將這些請(qǐng)求發(fā)送到服務(wù)器涂滴。

NSURLRequest被設(shè)計(jì)成通過創(chuàng)建擴(kuò)展來支持其他協(xié)議胆建,這些擴(kuò)展為您自己的特定于協(xié)議的屬性提供訪問器方法街州。這些方法可以通過調(diào)用URLProtocol methods屬性(forKey:in:)和setProperty(_:forKey:in:)來獲取和設(shè)置實(shí)際值兼丰。

NSURLRequest的可變子類是NSMutableURLRequest。

重要的

Foundation框架的Swift覆蓋提供了URLRequest結(jié)構(gòu)唆缴,它連接到NSURLRequest類及其可變子類NSMutableURLRequest鳍征。


UIWebView

在應(yīng)用程序中嵌入web內(nèi)容的視圖。

SDK ? 在iOS 2.0 - -12.0棄用

框架 ??UIKit

請(qǐng)注意

在iOS 8及以后運(yùn)行的應(yīng)用程序中面徽,使用WKWebView類而不是使用UIWebView艳丛。此外,如果呈現(xiàn)不應(yīng)該運(yùn)行JavaScript的文件,請(qǐng)考慮將WKPreferences屬性JavaScript設(shè)置為false氮双。


WKWebView

顯示交互式web內(nèi)容的對(duì)象旺聚,如應(yīng)用程序內(nèi)的瀏覽器。

SDK ? 在 iOS?8.0+????macOS 10.10 +?使用

框架 ??WebKit

重要的

從iOS 8.0和OS X 10.10開始眶蕉,使用WKWebView向應(yīng)用中添加web內(nèi)容砰粹。不要使用UIWebView或WebView。

您可以使用WKWebView類在應(yīng)用程序中嵌入web內(nèi)容造挽。為此碱璃,創(chuàng)建一個(gè)WKWebView對(duì)象,將其設(shè)置為視圖饭入,并發(fā)送一個(gè)請(qǐng)求來加載web內(nèi)容嵌器。

請(qǐng)注意

您可以在WKWebView中使用httpBody內(nèi)容發(fā)出POST請(qǐng)求。

在使用init(frame:configuration:)方法創(chuàng)建一個(gè)新的WKWebView對(duì)象之后谐丢,需要加載web內(nèi)容爽航。使用loadHTMLString(_:baseURL:)方法開始加載本地HTML文件或load(_:)方法開始加載web內(nèi)容。使用stopLoading()方法停止加載乾忱,使用isLoading屬性確定web視圖是否正在加載讥珍。將委托屬性設(shè)置為符合WKUIDelegate協(xié)議的對(duì)象,以跟蹤web內(nèi)容的加載窄瘟。參見清單1以編程方式創(chuàng)建WKWebView的示例衷佃。

清單1

以編程方式創(chuàng)建一個(gè)WKWebView

import UIKit

import WebKit

class ViewController: UIViewController, WKUIDelegate {

? ? var webView: WKWebView!

? ??? ? override func loadView() {

? ? ? ? let webConfiguration = WKWebViewConfiguration()

? ? ? ? webView = WKWebView(frame: .zero, configuration: webConfiguration)

? ? ? ? webView.uiDelegate = self

? ? ? ? view = webView

? ? }

? ? override func viewDidLoad() {

? ? ? ? super.viewDidLoad()

? ? ? ? let myURL = URL(string:ps://www.apple.com")

? ? ? ? let myRequest = URLRequest(url: myURL!)

? ? ? ? webView.load(myRequest)

? ? }}

要允許用戶在頁面歷史中前后移動(dòng),可以使用goBack()和goForward()方法作為按鈕的操作蹄葱。使用canGoBack和canGoForward屬性氏义,在用戶無法朝某個(gè)方向移動(dòng)時(shí)禁用按鈕。

默認(rèn)情況下图云,web view會(huì)自動(dòng)將出現(xiàn)在web內(nèi)容中的電話號(hào)碼轉(zhuǎn)換為電話鏈接惯悠。當(dāng)一個(gè)電話連接被監(jiān)聽時(shí),手機(jī)應(yīng)用程序就會(huì)啟動(dòng)并撥通號(hào)碼竣况。要關(guān)閉此默認(rèn)行為克婶,請(qǐng)使用不包含phoneNumber標(biāo)志的WKDataDetectorTypes位字段設(shè)置datadectortypes屬性。

還可以使用set放大率(_:centeredAt:)在web內(nèi)容第一次顯示在web視圖中時(shí)以編程方式設(shè)置它的比例帕翻。之后鸠补,用戶可以使用手勢(shì)來改變縮放比例萝风。


URLSession

協(xié)調(diào)一組相關(guān)網(wǎng)絡(luò)數(shù)據(jù)傳輸任務(wù)的對(duì)象嘀掸。

SDK ? 在 iOS 7.0 + ? ? ? macOS 10.9 + ? ????tvo 9.0 + ? ?????watchOS 2.0 +?使用

概述

URLSession類和相關(guān)類為下載內(nèi)容提供了一個(gè)API。這個(gè)API為支持身份驗(yàn)證提供了一組豐富的委托方法规惰,并使應(yīng)用程序能夠在應(yīng)用程序不運(yùn)行時(shí)執(zhí)行后臺(tái)下載睬塌,或者在iOS中,當(dāng)應(yīng)用程序暫停時(shí)執(zhí)行后臺(tái)下載。

重要的

URLSession API涉及到許多不同的類揩晴,它們以一種相當(dāng)復(fù)雜的方式協(xié)同工作勋陪,如果您自己閱讀參考文檔,這可能并不明顯硫兰。在使用此API之前诅愚,您應(yīng)該閱讀URL加載系統(tǒng)主題的概述。第一步部分中的文章提供了使用URLSession執(zhí)行常見任務(wù)的示例劫映。

使用URLSession API违孝,您的應(yīng)用程序創(chuàng)建一個(gè)或多個(gè)會(huì)話,每個(gè)會(huì)話協(xié)調(diào)一組相關(guān)的數(shù)據(jù)傳輸任務(wù)泳赋。例如雌桑,如果您正在創(chuàng)建一個(gè)web瀏覽器,您的應(yīng)用程序可能會(huì)為每個(gè)選項(xiàng)卡或窗口創(chuàng)建一個(gè)會(huì)話祖今,或者一個(gè)會(huì)話用于交互式使用校坑,另一個(gè)會(huì)話用于后臺(tái)下載。在每個(gè)會(huì)話中千诬,您的應(yīng)用程序添加一系列任務(wù)耍目,每個(gè)任務(wù)表示對(duì)特定URL的請(qǐng)求(如果需要,遵循HTTP重定向)徐绑。

類型的URL會(huì)話

給定URL會(huì)話中的任務(wù)共享一個(gè)公共會(huì)話配置對(duì)象制妄,該對(duì)象定義了連接行為,例如對(duì)單個(gè)主機(jī)進(jìn)行的最大同時(shí)連接數(shù)量泵三,是否允許通過蜂窩網(wǎng)絡(luò)進(jìn)行連接耕捞,等等。

URLSession有一個(gè)用于基本請(qǐng)求的單例共享會(huì)話(它沒有配置對(duì)象)烫幕。它不像您創(chuàng)建的會(huì)話那樣可定制俺抽,但如果您有非常有限的需求,它是一個(gè)很好的起點(diǎn)较曼。通過調(diào)用共享類方法訪問此會(huì)話磷斧。對(duì)于其他類型的會(huì)話,您使用以下三種配置之一實(shí)例化URLSession:

默認(rèn)會(huì)話的行為類似于共享會(huì)話捷犹,但允許進(jìn)行更多配置弛饭,并允許您使用委托增量地獲取數(shù)據(jù)。

短暫的會(huì)話與共享會(huì)話類似萍歉,但是不要向磁盤寫入緩存侣颂、cookie或憑據(jù)。

后臺(tái)會(huì)話允許您在應(yīng)用程序不運(yùn)行時(shí)在后臺(tái)執(zhí)行內(nèi)容的上傳和下載枪孩。

有關(guān)創(chuàng)建每種配置類型的詳細(xì)信息憔晒,請(qǐng)參見在URLSessionConfiguration類中創(chuàng)建會(huì)話配置對(duì)象藻肄。

URL會(huì)話任務(wù)的類型

在會(huì)話中,您可以創(chuàng)建任務(wù)拒担,可選地將數(shù)據(jù)上載到服務(wù)器嘹屯,然后以磁盤上的文件或內(nèi)存中的一個(gè)或多個(gè)NSData對(duì)象的形式從服務(wù)器檢索數(shù)據(jù)。URLSession API提供了三種類型的任務(wù):

數(shù)據(jù)任務(wù)使用NSData對(duì)象發(fā)送和接收數(shù)據(jù)从撼。數(shù)據(jù)任務(wù)是用于向服務(wù)器發(fā)出簡(jiǎn)短的州弟、通常是交互式的請(qǐng)求。

上傳任務(wù)與數(shù)據(jù)任務(wù)類似低零,但它們也發(fā)送數(shù)據(jù)(通常以文件的形式)呆馁,并在應(yīng)用程序不運(yùn)行時(shí)支持后臺(tái)上傳。

下載任務(wù)以文件的形式檢索數(shù)據(jù)毁兆,并且在應(yīng)用程序沒有運(yùn)行時(shí)支持后臺(tái)下載和上傳浙滤。

使用一個(gè)會(huì)話委托

會(huì)話中的任務(wù)還共享一個(gè)公共委托,該委托允許您在發(fā)生各種事件時(shí)提供和獲取信息——當(dāng)身份驗(yàn)證失敗時(shí)气堕,當(dāng)來自服務(wù)器的數(shù)據(jù)到達(dá)時(shí)纺腊,當(dāng)數(shù)據(jù)準(zhǔn)備緩存時(shí),等等茎芭。使用URL會(huì)話可以逐步地列出會(huì)話執(zhí)行任務(wù)時(shí)發(fā)生的事件揖膜,以及調(diào)用哪個(gè)委托方法。

另一方面梅桩,如果您不需要委托提供的任何特性壹粟,您可以在創(chuàng)建會(huì)話時(shí)使用這個(gè)API,而不提供一個(gè)通過nil的方法宿百。

重要的

會(huì)話對(duì)象保存對(duì)委托的強(qiáng)引用趁仙,直到應(yīng)用程序退出或顯式地使會(huì)話無效為止。如果你不讓會(huì)話失效垦页,你的應(yīng)用程序會(huì)泄漏內(nèi)存雀费,直到它退出。

異步性和URL會(huì)話

與大多數(shù)網(wǎng)絡(luò)API一樣痊焊,URLSession API是高度異步的盏袄。它以兩種方式向應(yīng)用程序返回?cái)?shù)據(jù),具體取決于您調(diào)用的方法:

通過調(diào)用一個(gè)完成處理程序塊薄啥,當(dāng)傳輸完成成功或有錯(cuò)誤時(shí)辕羽。

通過調(diào)用會(huì)話委托上的方法作為接收數(shù)據(jù)和傳輸完成時(shí)的方法。

除了向委托交付這些信息之外垄惧,URLSession API還提供了狀態(tài)和進(jìn)度屬性刁愿,如果您需要根據(jù)任務(wù)的當(dāng)前狀態(tài)進(jìn)行編程決策,您可以查詢這些屬性(需要注意的是赘艳,它的狀態(tài)隨時(shí)都可能改變)酌毡。

URL會(huì)話還支持取消克握、重新啟動(dòng)或恢復(fù)蕾管、暫停任務(wù)枷踏,并提供恢復(fù)暫停、取消或失敗下載的能力掰曾。

協(xié)議支持

URLSession類本機(jī)支持?jǐn)?shù)據(jù)旭蠕、文件、ftp旷坦、http和https URL方案掏熬,對(duì)代理服務(wù)器和SOCKS網(wǎng)關(guān)進(jìn)行透明的支持,在用戶的系統(tǒng)首選項(xiàng)中配置秒梅。

URLSession支持HTTP/1.1旗芬、SPDY和HTTP/2協(xié)議。RFC 7540描述了HTTP/2支持捆蜀,并要求服務(wù)器支持ALPN或NPN進(jìn)行協(xié)議協(xié)商疮丛。

您還可以通過子類化URLProtocol為您自己的自定義網(wǎng)絡(luò)協(xié)議和URL計(jì)劃(為您的應(yīng)用程序的私有使用)添加支持。

App Transport Security (ATS)

從iOS 9.0和OS X 10.11開始辆它,默認(rèn)情況下誊薄,所有使用URLSession建立的HTTP連接都會(huì)啟用一個(gè)名為App Transport security (ATS)的新安全特性。ATS要求HTTP連接使用HTTPS (RFC 2818)锰茉。

使用一個(gè)URL會(huì)話

使用URLSession類發(fā)出請(qǐng)求:

1. 創(chuàng)建一個(gè)會(huì)話配置呢蔫。對(duì)于后臺(tái)會(huì)話,此配置必須包含唯一標(biāo)識(shí)符飒筑。存儲(chǔ)該標(biāo)識(shí)符片吊,并在應(yīng)用程序崩潰或終止或暫停時(shí)使用它與會(huì)話重新關(guān)聯(lián)。

2. 創(chuàng)建一個(gè)會(huì)話协屡,指定一個(gè)配置對(duì)象和一個(gè)可選的委托定鸟。

3. 在會(huì)話中創(chuàng)建任務(wù)對(duì)象,每個(gè)對(duì)象表示一個(gè)資源請(qǐng)求著瓶。這些任務(wù)對(duì)象是URLSessionTask-URLSessionDataTask联予、URLSessionUploadTask或URLSessionDownloadTask的子類,具體取決于您試圖實(shí)現(xiàn)的行為材原。每個(gè)任務(wù)都以暫停狀態(tài)開始沸久。在應(yīng)用程序調(diào)用任務(wù)的resume()之后,它開始下載指定的資源余蟹。

啟動(dòng)任務(wù)后卷胯,會(huì)話調(diào)用其委托的方法,如下:

1. 如果與服務(wù)器的初始握手需要連接級(jí)別的挑戰(zhàn)(比如SSL客戶端證書)威酒,則URLSession調(diào)用URLSession (_:task:didReceive:completionHandler:)或URLSession (_:didReceive:completionHandler:)委托方法窑睁。

2. 如果從流中提供任務(wù)的數(shù)據(jù)挺峡,則URLSession對(duì)象調(diào)用委托的URLSession (_:task:needNewBodyStream:)委托方法來獲取InputStream實(shí)例,該實(shí)例為新請(qǐng)求提供主體數(shù)據(jù)担钮。

3. 在將主體內(nèi)容初始上載到服務(wù)器(如果適用的話)期間橱赠,委托定期接收urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)回調(diào),報(bào)告上傳進(jìn)度箫津。

4. 服務(wù)器發(fā)送一個(gè)響應(yīng)狭姨。

5. 如果響應(yīng)表明需要身份驗(yàn)證,會(huì)話將調(diào)用其委托的urlSession(_:task:didReceive:completionHandler:)方法苏遥”模回到步驟2。

6. 如果響應(yīng)是一個(gè)HTTP重定向響應(yīng)田炭,URLSession對(duì)象調(diào)用委托的URLSession(_:任務(wù):willPerformHTTPRedirection:newRequest:completionHandler:)方法师抄。該委托方法使用提供的NSURLRequest對(duì)象(跟蹤重定向)、新的NSURLRequest對(duì)象(重定向到不同的URL)或nil(將重定向的響應(yīng)主體視為有效響應(yīng)并將其作為結(jié)果返回)來調(diào)用提供的完成處理程序教硫。

? ? — 如果您決定遵循重定向叨吮,請(qǐng)回到步驟2。

????— 如果委托沒有實(shí)現(xiàn)此方法栋豫,那么重定向?qū)⒈桓櫟街囟ㄏ虻淖畲髷?shù)量挤安。

7. 對(duì)于通過調(diào)用downloadTask(with resumedata:)或downloadTask(with resumedata:)創(chuàng)建的下載(或重新下載)任務(wù),URLSession使用新的任務(wù)對(duì)象調(diào)用委托的URLSession (_:downloadTask:didResumeAtOffset:expected tedtotalbytes:)方法丧鸯。

8. 對(duì)于數(shù)據(jù)任務(wù)蛤铜,URLSession對(duì)象調(diào)用委托的URLSession (_:dataTask:didReceive:completionHandler:)方法。決定是否將數(shù)據(jù)任務(wù)轉(zhuǎn)換為下載任務(wù)丛肢,然后調(diào)用完成處理程序來轉(zhuǎn)換围肥、繼續(xù)或取消任務(wù)。如果您的應(yīng)用程序選擇將數(shù)據(jù)任務(wù)轉(zhuǎn)換為下載任務(wù)蜂怎,URLSession以新的下載任務(wù)為參數(shù)調(diào)用委托的URLSession (_:dataTask:didBecome:)方法穆刻。在此調(diào)用之后,委托不再接收來自數(shù)據(jù)任務(wù)的進(jìn)一步回調(diào)杠步,并開始接收來自下載任務(wù)的回調(diào)氢伟。

9. 在從服務(wù)器進(jìn)行傳輸期間,委托定期接收任務(wù)級(jí)回調(diào)幽歼,以報(bào)告?zhèn)鬏斶M(jìn)度朵锣。對(duì)于數(shù)據(jù)任務(wù),會(huì)話調(diào)用委托的urlSession(_:dataTask:didReceive:)方法甸私,并在接收數(shù)據(jù)時(shí)調(diào)用它們的實(shí)際數(shù)據(jù)片段诚些。對(duì)于一個(gè)下載任務(wù),會(huì)話調(diào)用委托的urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)方法皇型,成功寫入磁盤的字節(jié)數(shù)诬烹。如果用戶告訴應(yīng)用程序暫停下載砸烦,通過調(diào)用cancel(通過producingresumedata:)方法取消任務(wù)。稍后绞吁,如果用戶要求您的應(yīng)用程序繼續(xù)下載幢痘,則將返回的簡(jiǎn)歷數(shù)據(jù)傳遞給downloadTask(withResumeData:)或downloadTask(withResumeData:completionHandler:),以創(chuàng)建一個(gè)新的下載任務(wù)掀泳,繼續(xù)下載雪隧。(步驟1)西轩。

10. 對(duì)于一個(gè)數(shù)據(jù)任務(wù)员舵,URLSession對(duì)象可以調(diào)用委托的URLSession (_:dataTask:willCacheResponse:completionHandler:)方法。然后應(yīng)用程序應(yīng)該決定是否允許緩存藕畔。如果不實(shí)現(xiàn)此方法马僻,默認(rèn)行為是使用會(huì)話配置對(duì)象中指定的緩存策略。如果響應(yīng)是多部分編碼的注服,會(huì)話可能再次調(diào)用委托的didReceiveResponse方法韭邓,然后是零個(gè)或多個(gè)額外的didReceiveData調(diào)用。如果發(fā)生這種情況溶弟,請(qǐng)轉(zhuǎn)到步驟8(處理didReceiveResponse調(diào)用)女淑。

11. 如果下載任務(wù)成功完成,則URLSession對(duì)象調(diào)用任務(wù)的URLSession (_:downloadTask:didFinishDownloadingTo:)方法辜御,該方法具有臨時(shí)文件的位置鸭你。應(yīng)用程序必須從這個(gè)文件中讀取響應(yīng)數(shù)據(jù),或者在這個(gè)委托方法返回之前將其移動(dòng)到一個(gè)永久位置擒权。

12.如果下載任務(wù)成功完成袱巨,則URLSession對(duì)象調(diào)用任務(wù)的URLSession (_:downloadTask:didFinishDownloadingTo:)方法,該方法具有臨時(shí)文件的位置碳抄。應(yīng)用程序必須從這個(gè)文件中讀取響應(yīng)數(shù)據(jù)愉老,或者在這個(gè)委托方法返回之前將其移動(dòng)到一個(gè)永久位置。

13.?當(dāng)任何任務(wù)完成時(shí)剖效,URLSession對(duì)象調(diào)用委托的URLSession (_:task:didCompleteWithError:)方法嫉入,該方法具有錯(cuò)誤對(duì)象或nil(如果任務(wù)成功完成)。如果可以繼續(xù)下載任務(wù)璧尸,則NSError對(duì)象的userInfo字典包含nsurlsessiondownloadtask_taskresumedata鍵的值咒林。應(yīng)用程序應(yīng)該將此值傳遞給downloadTask(withResumeData:)或downloadTask(withResumeData:completionHandler:),以創(chuàng)建一個(gè)新的下載任務(wù)逗宁,繼續(xù)現(xiàn)有的下載映九。如果任務(wù)無法恢復(fù),您的應(yīng)用程序應(yīng)該創(chuàng)建一個(gè)新的下載任務(wù)瞎颗,并從開始重新啟動(dòng)事務(wù)件甥。在任何一種情況下捌议,如果傳輸失敗(除了服務(wù)器錯(cuò)誤之外),請(qǐng)轉(zhuǎn)到步驟3(創(chuàng)建和恢復(fù)任務(wù)對(duì)象)引有。

14.?如果您不再需要會(huì)話瓣颅,您可以通過調(diào)用invalidateAndCancel()(取消未完成的任務(wù))或finishTasksAndInvalidate()(允許未完成的任務(wù)在對(duì)象無效之前完成)來使其無效。如果您不取消會(huì)話譬正,那么當(dāng)您的應(yīng)用程序終止時(shí)宫补,會(huì)話將自動(dòng)消失(除非它是一個(gè)有活動(dòng)任務(wù)的后臺(tái)會(huì)話)。在使會(huì)話無效之后曾我,當(dāng)所有未完成的任務(wù)被取消或完成時(shí)粉怕,會(huì)話調(diào)用委托的urlSession(_:didBecomeInvalidWithError:)方法。當(dāng)該委托方法返回時(shí)抒巢,會(huì)話處理它對(duì)委托的強(qiáng)引用贫贝。

如果應(yīng)用程序取消正在進(jìn)行的下載,URLSession對(duì)象會(huì)調(diào)用委托的URLSession (_:task:didCompleteWithError:)方法蛉谜,就好像發(fā)生了錯(cuò)誤一樣稚晚。

NSCopying行為

會(huì)話和任務(wù)對(duì)象遵循以下NSCopying協(xié)議:

當(dāng)你的應(yīng)用程序復(fù)制一個(gè)會(huì)話或任務(wù)對(duì)象時(shí),你會(huì)得到相同的對(duì)象型诚。

當(dāng)你的應(yīng)用程序復(fù)制一個(gè)配置對(duì)象時(shí)客燕,你會(huì)得到一個(gè)可以獨(dú)立修改的新拷貝。

線程安全

URL會(huì)話API本身是線程安全的狰贯。您可以在任何線程上下文中自由地創(chuàng)建會(huì)話和任務(wù)也搓,當(dāng)您的委托方法調(diào)用所提供的完成處理程序時(shí),工作將自動(dòng)調(diào)度到正確的委托隊(duì)列上暮现。

警告

您的urlSessionDidFinishEvents(forBackgroundURLSession:)會(huì)話委托方法可以在輔助線程上調(diào)用还绘。但是,在iOS中栖袋,該方法的實(shí)現(xiàn)可能需要調(diào)用應(yīng)用程序中提供的完成處理程序(_:handleeventsforbackgrounddurlsession:completionHandler:)拍顷。您必須在主線程上調(diào)用完成處理程序。

上述是從蘋果文檔里翻譯過來的塘幅,沒有任何人為修飾加工昔案,只是翻譯的有點(diǎn)晦澀難懂。對(duì)付著看吧电媳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踏揣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匾乓,更是在濱河造成了極大的恐慌捞稿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異娱局,居然都是意外死亡彰亥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門衰齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來任斋,“玉大人,你說我怎么就攤上這事耻涛》峡幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵抹缕,是天一觀的道長澈蟆。 經(jīng)常有香客問我,道長歉嗓,這世上最難降的妖魔是什么丰介? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任背蟆,我火速辦了婚禮鉴分,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘带膀。我一直安慰自己志珍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布垛叨。 她就那樣靜靜地躺著伦糯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗽元。 梳的紋絲不亂的頭發(fā)上敛纲,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音剂癌,去河邊找鬼淤翔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛佩谷,可吹牛的內(nèi)容都是我干的旁壮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谐檀,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抡谐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桐猬,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤麦撵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體免胃,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡五垮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杜秸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片放仗。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撬碟,靈堂內(nèi)的尸體忽然破棺而出诞挨,到底是詐尸還是另有隱情,我是刑警寧澤呢蛤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布惶傻,位于F島的核電站,受9級(jí)特大地震影響其障,放射性物質(zhì)發(fā)生泄漏银室。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一励翼、第九天 我趴在偏房一處隱蔽的房頂上張望蜈敢。 院中可真熱鬧,春花似錦汽抚、人聲如沸抓狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽否过。三九已至,卻和暖如春惭蟋,著一層夾襖步出監(jiān)牢的瞬間苗桂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工告组, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煤伟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓惹谐,卻偏偏與公主長得像持偏,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氨肌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容