iOS AFNetworking 源碼解析

https://github.com/AFNetworking/AFNetworking

一彤钟、AFNetworking主要分為四大模塊:

  • NSURLSession(會話管理器)
  • Reachability(網(wǎng)絡管理器)
  • Security(安全策略)
  • Serialization(請求序列化與響應)

二绷落、AFSecurityPolicy.m

AFN提供的三種安全策略:

typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {

    AFSSLPinningModeNone,//無校驗

    AFSSLPinningModePublicKey,//公鑰校驗

    AFSSLPinningModeCertificate,//證書校驗

};

三個類方法初始化安全策略:

  • 1拨黔、默認的安全策略,不允許無效的證書匾竿,需要驗證域名瓦宜,不會對固定的證書和公鑰做校驗;
+ (instancetype)defaultPolicy;
  • 2岭妖、創(chuàng)建并返回一個指定安全模式的策略临庇;
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;

3、創(chuàng)建并返回一個指定安全模式并綁定證書的安全策略昵慌。

+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet <NSData *> *)pinnedCertificates;

三苔巨、AFNetworkReachabilityManager.m

AFN提供的四種網(wǎng)絡狀態(tài):

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {

    AFNetworkReachabilityStatusUnknown          = -1,//未知網(wǎng)絡

    AFNetworkReachabilityStatusNotReachable    = 0,//沒網(wǎng)絡

    AFNetworkReachabilityStatusReachableViaWWAN = 1,//蜂窩網(wǎng)絡

    AFNetworkReachabilityStatusReachableViaWiFi = 2,//wifi

};

五種初始化方式:

//返回有默認套接字地址的網(wǎng)絡管理器單例;

+ (instancetype)sharedManager;

//返回有默認套接字地址的網(wǎng)絡管理器废离;

+ (instancetype)manager;

//返回有指定域的網(wǎng)絡管理器侄泽;

+ (instancetype)managerForDomain:(NSString *)domain;

//創(chuàng)建并返回具有自定義套接字地址的網(wǎng)絡管理器

+ (instancetype)managerForAddress:(const void *)address;

//通過系統(tǒng)的網(wǎng)絡檢測對象初始化網(wǎng)絡管理器

+ (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;

網(wǎng)絡狀態(tài)改變時,block回調:

- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;

四蜻韭、AFURLRequestSerialization.m

暫定一種HTTP請求序列化類型:

typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) {

    AFHTTPRequestQueryStringDefaultStyle = 0,

};

AFURLRequestSerialization協(xié)議:返回一個帶指定參數(shù)的序列化請求悼尾。

AFHTTPRequestSerializer類(遵守AFURLRequestSerialization協(xié)議):

對序列化參數(shù)進行編碼柿扣、是否可以用手機流量創(chuàng)建網(wǎng)絡、創(chuàng)建請求的緩存策略闺魏、創(chuàng)建cookies處理方式未状、是否在接收請求響應之前繼續(xù)發(fā)送請求、設置超時時間析桥、設置獲取請求頭信息司草、設置清除http auth信息、默認和自定義查詢字符串序列化方法泡仗。

三種創(chuàng)建并返回可變url請求的方法:

//默認方法

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method

                                URLString:(NSString *)URLString

                                parameters:(nullable id)parameters

                                    error:(NSError * _Nullable __autoreleasing *)error;

//自定義block方法

- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method

                                              URLString:(NSString *)URLString

                                            parameters:(nullable NSDictionary <NSString *, id> *)parameters

                              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                                                  error:(NSError * _Nullable __autoreleasing *)error;

//刪除HTTPBodySteam

- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request

                            writingStreamContentsToFile:(NSURL *)fileURL

                                      completionHandler:(nullable void (^)(NSError * _Nullable error))handler;

AFJSONRequestSerializer:專門用來處理類型為json的請求埋虹。

AFPropertyListRequestSerializer:專門用來處理類型為x-plist的請求。

五娩怎、AFURLResponseSerialization.m

1搔课、AFURLResponseSerialization協(xié)議:返回一個帶指定參數(shù)的序列化響應協(xié)議。
2截亦、AFHTTPResponseSerializer類:初始化響應類爬泥、設置響應可接受的狀態(tài)碼、設置響應可接受的Content - Type類型崩瓤、是否返回有效的響應袍啡。
3、AFJSONResponseSerializer:檢驗和解碼application/json却桶、text/json境输、text/javascript類型的響應。
4肾扰、AFXMLParserResponseSerializer:檢驗和解碼application/xml畴嘶、text/xml類型的響應蛋逾。
5集晚、AFXMLDocumentResponseSerializer:檢驗和解碼application/xml、text/xml文檔類型的響應区匣。
6偷拔、AFPropertyListResponseSerializer:檢驗和解碼x-plist類型的響應。
7亏钩、AFImageResponseSerializer:檢驗和解碼UIImage和NSImage類型的響應莲绰。
8、AFCompoundResponseSerializer:檢驗和解碼多種潛在類型的響應

六姑丑、AFURLSessionManager.m

兩種初始化方法:

//根據(jù)配置信息初始化網(wǎng)絡會話

- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration;

//配置信息為nil蛤签,初始化網(wǎng)絡會話

- (instancetype)init;

取消網(wǎng)絡操作:

//是否取消任務,使網(wǎng)絡會話失效

- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks;

創(chuàng)建普通網(wǎng)絡會話:

//根據(jù)請求信息創(chuàng)建網(wǎng)絡會話

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

                            completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler DEPRECATED_ATTRIBUTE;

//根據(jù)請求信息創(chuàng)建可以查詢上傳栅哀、下載進度的網(wǎng)絡會話                           

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

                              uploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                            downloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock

                            completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler;

創(chuàng)建上傳網(wǎng)絡會話:

//根據(jù)請求信息和文件url創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request

                                        fromFile:(NSURL *)fileURL

                                        progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError  * _Nullable error))completionHandler;

//根據(jù)請求信息和要上傳的數(shù)據(jù)創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話           

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request

                                        fromData:(nullable NSData *)bodyData

                                        progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler;

//根據(jù)請求和輸入流創(chuàng)建可以查詢上傳進度的網(wǎng)絡會話

- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request

                                                progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock

                                        completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler;

設置網(wǎng)絡請求的回調:

//設置會話失效時回調的block

- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block;

//設置對接收到的http auth進行校驗時震肮,回調的block称龙。

- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block;

//設置新的輸入流時,回調的block戳晌。

- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block;

//設置HTTP重定向時,回調的block鲫尊。

- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * _Nullable (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block;

//設置對接收到的http auth進行校驗時,回調的block沦偎。

- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block;

//設置發(fā)送的數(shù)據(jù)時疫向,回調的block。

- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block;

//完成網(wǎng)絡任務時進行設置

- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block;

//接收到響應時豪嚎,回調block

- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block;

//當下載任務完成時搔驼,設置網(wǎng)絡任務

- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block;

//當數(shù)據(jù)接收到時,設置網(wǎng)絡任務

- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block;

//臨時緩存時設置任務

- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block;

//當所有的任務發(fā)送出去以后疙渣,回調block

- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block;

//當下載任務完成時匙奴,回調block

- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable  (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block;

//下載時,寫入數(shù)據(jù)的回調block

- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block;

//設置斷點續(xù)傳的block

- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block;

七妄荔、AFHTTPSessionManager.m

四種初始化方法:

//url和配置信息都是nil

+ (instancetype)manager;

//url和配置信息都是nil

+ (instancetype)init;

//配置信息是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url;

//url是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url

          sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration;

//url和配置信息都是nil

+ (instancetype)manager;

//url和配置信息都是nil

+ (instancetype)init;

//配置信息是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url;

//url是nil

- (instancetype)initWithBaseURL:(nullable NSURL *)url

          sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration;

網(wǎng)絡請求方法[Get,Post,Put,Patch,Delete,Head]:

//GET請求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//可查詢下載進度的GET請求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress

                              success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                              failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//HEAD請求

- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//POST請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//可查詢上傳進度的POST請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//根據(jù)表單類型泼菌,構建POST網(wǎng)絡請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

    constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//PUT請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;//根據(jù)表單類型,構建POST網(wǎng)絡請求啦租,可查詢上傳進度

- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//PATCH請求

- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString

                    parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//DELETE請求

- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString

                      parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//GET請求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//可查詢下載進度的GET請求

- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress

                              success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                              failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//HEAD請求

- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//POST請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//可查詢上傳進度的POST請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//根據(jù)表單類型哗伯,構建POST網(wǎng)絡請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(nullable id)parameters

    constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

//PUT請求

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

                            parameters:(nullable id)parameters

              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block

                              progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;//根據(jù)表單類型,構建POST網(wǎng)絡請求篷角,可查詢上傳進度

- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString

                  parameters:(nullable id)parameters

                      success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                      failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//PATCH請求

- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString

                    parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//DELETE請求

- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString

                      parameters:(nullable id)parameters

                        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

                        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末焊刹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恳蹲,更是在濱河造成了極大的恐慌虐块,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉蕾,死亡現(xiàn)場離奇詭異贺奠,居然都是意外死亡,警方通過查閱死者的電腦和手機错忱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門儡率,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人以清,你說我怎么就攤上這事儿普。” “怎么了掷倔?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵眉孩,是天一觀的道長。 經(jīng)常有香客問我,道長浪汪,這世上最難降的妖魔是什么障贸? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮吟宦,結果婚禮上篮洁,老公的妹妹穿的比我還像新娘。我一直安慰自己殃姓,他們只是感情好袁波,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜗侈,像睡著了一般篷牌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踏幻,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天枷颊,我揣著相機與錄音,去河邊找鬼该面。 笑死夭苗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的隔缀。 我是一名探鬼主播题造,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猾瘸!你這毒婦竟也來了界赔?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牵触,失蹤者是張志新(化名)和其女友劉穎淮悼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揽思,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡袜腥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绰更。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞧挤。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡锡宋,死狀恐怖儡湾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情执俩,我是刑警寧澤徐钠,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站役首,受9級特大地震影響尝丐,放射性物質發(fā)生泄漏显拜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一爹袁、第九天 我趴在偏房一處隱蔽的房頂上張望远荠。 院中可真熱鬧,春花似錦失息、人聲如沸譬淳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻梆。三九已至,卻和暖如春绎秒,著一層夾襖步出監(jiān)牢的瞬間浦妄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工见芹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剂娄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓玄呛,卻偏偏與公主長得像宜咒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子把鉴,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355