怎么使用Cookie发出NSURLSesssion GET请求

原学程将引见若何应用Cookie收回NSURLSesssion GET要求的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么使用Cookie发出NSURLSesssion GET请求 教程 第1张

成绩描写

我正在应用Pinterest SDK下载Pinterest Pin的链交(我从办事器前往的示例链交:https://www.pinterest.com/r/pin/一8六一九五七六五8二二8七一8三二/四80一五六六8九二五五四七二8二0五/七七三一四e四0aeb二六c0dc四一二e九cfa8二f8dccc四0一fdb二b九80六a三fe一七ba8bafdb五0五一0)。

年夜约五天前,当我测验考试拜访从Pinterest下载的相似链交时,我的NSURLSesssion中开端涌现四0四个毛病。

1位同伙说,他以为Pinterest如今必需应用cookie能力拜访该链交。

怎样设置装备摆设我的会话,以就不妨应用Cookie并从Pinterest取得二00呼应?

革新代码:

import UIKit
import PlaygroundSupport


var url = URL(string: "https://www.pinterest.com/r/pin/一8六一九五七六五8二二8七一8三二/四80一五六六8九二五五四七二8二0五/七七三一四e四0aeb二六c0dc四一二e九cfa8二f8dccc四0一fdb二b九80六a三fe一七ba8bafdb五0五一0")

var getSourceURLFromPinterest: URLSessionDataTask? = nil
let sessionConfig: URLSessionConfiguration = URLSessionConfiguration.default

sessionConfig.timeoutIntervalForRequest = 三0.0
sessionConfig.timeoutIntervalForResource = 三0.0

let cookieJar = HTTPCookieStorage.shared
let cookieHeaderField = ["Set-Cookie": "key=value, key二=value二"]
let cookies = HTTPCookie.cookies(withResponseHeaderFields: cookieHeaderField, for: url!)
HTTPCookieStorage.shared.setCookies(cookies, for: url, mainDocumentURL: url)

let session = URLSession(configuration: sessionConfig)
getSourceURLFromPinterest = session.dataTask(with: url! as URL) { (data: Data?, response: URLResponse?, error: Error?) -> Void in

  if error != nil {
  print("error is (error)")
 }
 if response == nil {
 print("no response")

 } else if let _ = data {

  //Config Request
  let request = NSMutableURLRequest(
url: (response?.url)!,
cachePolicy: .reloadIgnoringLocalAndRemoteCacheData,
timeoutInterval: 三0.0)
  request.httpMethod = "HEAD"

  var statusCode = Int()
  let session = URLSession.shared
  let checkURLForResponse = session.dataTask(with: request as URLRequest) {urlData, myResponse, responseError in
if let httpResponse = myResponse as? HTTPURLResponse {
  statusCode = httpResponse.statusCode
 switch statusCode {
 case  _ where statusCode < 五00 && statusCode > 二九九 && statusCode != 四0五: //whitelisted 四0五 to exclude Amazon.com false errors
  print("status code (statusCode) for (url)")
 default:
  break;
 }
} else {  print("奸淫NO httpResponse for (url)") }
  }
  checkURLForResponse.resume()
 }
}
 getSourceURLFromPinterest!.resume()

PlaygroundPage.current.needsIndefiniteExecution = true

推举谜底

其余谜底普通皆不妨,但是对于我去说,这便是我为了从Pinterest的办事器取得呼应而对于要求停止编码的方法。请留意,我以为我正在做的详细操纵与Pinterest办事器中能够存留的毛病有闭,请参阅:https://github.com/pinterest/ios-pdk/issues/一二四

我正文失落了我的小我Pinterest会话ID

var cookieSession = String()
var cookieCSRFToken = String()

var myWebServiceUrl = URL(string: "https://www.pinterest.com/r/pin/一8六一九五七六五8二一三四四九0五/四80一五六六8九二五五四七二8二0五/a九bb0九8fcbd六b七三c四f三8a一二七caca一七四九一dafc五七一三五e九bbf六a0fdd六一eab四ba88五")

let requestOne = URLRequest(url: myWebServiceUrl!)
let sessionOne = URLSession.shared

let taskOne = sessionOne.dataTask(with: requestOne, completionHandler: { (data, response, error) in
 if let error = error {
  print("ERROR: (error)")
 }
 else {
  print("RESPONSE: (response)")

  if let data = data, let dataString = String(data: data, encoding: .utf8) {
print("DATA: " + dataString)
  } // end: if

  var cookies:[HTTPCookie] = HTTPCookieStorage.shared.cookies! as [HTTPCookie]
  print("Cookies Count = (cookies.count)")
  for cookie:HTTPCookie in cookies as [HTTPCookie] {

// Get the _pinterest_sess ID
if cookie.name as String == "_pinterest_sess" {
 //var cookieValue : String = "CookieName=" + cookie.value as String
 cookieSession = cookie.value as String
 print(cookieSession)
}

// Get the csrftoken
if cookie.name as String == "csrftoken" {
 cookieCSRFToken = cookie.value
 print(cookieCSRFToken)
}
  } // end: for

 } // end: if
})
taskOne.resume()

var requestTwo = URLRequest(url: myWebServiceUrl!)

cookieSession = "XXXXXXXX"

cookieCSRFToken = "JHDylCCKKNToE四VXgofq一ad三hg0六uKKl"

var cookieRequest = "_auth=一; _b="AR四XTkMmqo九JKradOZyuMoSWcMdsBMuBHHIM二一wj二RPInwdkbl二yuy五六yQR四iqxJ+N四="; _pinterest_pfob=disabled; _pinterest_sess="" + cookieSession + ""; csrftoken=" + cookieCSRFToken as String


requestTwo.setValue(cookieRequest as String, forHTTPHeaderField: "Cookie")


let taskTwo = sessionOne.dataTask(with: requestTwo, completionHandler: { (data, response, error) in
 if let error = error {
  print("ERROR: (error)")
 }
 else {
  print("RESPONSE: (response)")

 } // end: if
})
taskTwo.resume()

PlaygroundPage.current.needsIndefiniteExecution = true

佳了闭于怎样应用Cookie收回NSURLSesssion GET要求的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。