2016-10-02 6 views
0

私は迅速にキー(MailGun)で保護されたAPIに投稿しようとしていますが、私のキーは決して利用されません。キー提供)https://documentation.mailgun.com/api-intro.html#errors迅速なセキュリティ保護されたAPIへの投稿

URLとキーが正しいことを確認しましたが、curlを使用して投稿していますが、私のキーがここで使用されていない理由はわかりません。私は>私のコードのようなですが、私は<を持つすべての個人情報を交換してきた、これは正しく

を認証されていない理由として、誰かが正しい方向にポイントすることができます願っています:

// Email the FBO with desired information 
let session = NSURLSession.sharedSession() 
let request = NSMutableURLRequest(URL: NSURL(string: "https://api.mailgun.net/v3/<My Domain>/messages")!) 
request.HTTPMethod = "POST" 
let data = "from: Excited User <[email protected]<mg.mydomain.com>>&to: [[email protected],<my email>]&subject:Hello&text:Testinggsome Mailgun awesomness!" 
request.HTTPBody = data.dataUsingEncoding(NSASCIIStringEncoding) 
request.setValue("key-<my key>", forHTTPHeaderField: "api") 
let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
    if let error = error { 
     print(error) 
    } 

    if let response = response { 
     print("url = \(response.URL!)") 
     print("response = \(response)") 
     let httpResponse = response as! NSHTTPURLResponse 
     print("response code = \(httpResponse.statusCode)") 
    } 
}) 
task.resume() 

は更新日:

数時間それを離れて私はまだそれの周りに私の頭を得ることができません。たぶん私はあなたが何を意味するか正確には分かりません?基本認証資格情報が送信されることはありませんようにそれは私には見えます

request.setValue("api", forHTTPHeaderField: "username") 
request.setValue("key-<my key>", forHTTPHeaderField: "password") 

:私は明示的にそうようにそれを入力しようとした

curl -s --user 'api:key-<my personal key>' https://api.mailgun.net/v3/mg.<my domain>.com/messages -F from='Reservation Scheduler <[email protected]<my domain>.com>' -F [email protected]<my domain>.com -F subject='Curl Test' -F text='Test from terminal' 

を:私は正常に使用することにより、カールとの応答を得ることができますか?フィールドが「ユーザー」と「パスワード」であることを確認するにはどうすればよいですか?

+0

文書を誤解しています。あなたはユーザー名として "api"を、基本認証ヘッダーのパスワードとしてキーを提供する必要があります – Paulw11

+0

昨夜と今朝、さらに2,3時間を費やしました。アップデートを投稿しました。資格情報が実際に送信されないことはありますか?カールを見ると、それは私にとってapi - > keyのように見えます。明示的にユーザー名とパスワードを設定しようとしました。 挫折しました。 –

+0

私は要求を見ることができるようにセッションを印刷しようとしていますが、私は8進数のバックのみを受け取ります。間違った場所に送信されているものをデバッグできるように要求を正しく印刷することはできますか、まったく送信されませんか? –

答えて

0

ヘッダーの認証セクションが見つからないことを確認した後、大規模なHTTP応答で正しく動作するようになりました。 Keys.plistに完全なパスを入れて、自分のコードをgithubにアップロードして、引数のいくつかを変数に分解して、後にプログラムでそれらを設定することができます。

// Email the FBO with desired information 
// Parse our Keys.plist so we can use our path 
var keys: NSDictionary? 

if let path = NSBundle.mainBundle().pathForResource("Keys", ofType: "plist") { 
    keys = NSDictionary(contentsOfFile: path) 
} 

if let dict = keys { 
    // variablize our https path with API key, recipient and message text 
    let mailgunAPIPath = dict["mailgunAPIPath"] as? String 
    let emailRecipient = "[email protected]" 
    let emailMessage = "Testing%20email%20sender%20variables" 

    // Create a session and fill it with our request 
    let session = NSURLSession.sharedSession() 
    let request = NSMutableURLRequest(URL: NSURL(string: mailgunAPIPath! + "from=FBOGo%20Reservation%20%[email protected]<my domain>.com%3E&[email protected]<my domain>.com&to=\(emailRecipient)&subject=A%20New%20Reservation%21&text=\(emailMessage)")!) 

    // POST and report back with any errors and response codes 
    request.HTTPMethod = "POST" 
    let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
     if let error = error { 
      print(error) 
     } 

     if let response = response { 
      print("url = \(response.URL!)") 
      print("response = \(response)") 
      let httpResponse = response as! NSHTTPURLResponse 
      print("response code = \(httpResponse.statusCode)") 
     } 
    }) 
    task.resume() 
} 

Mailgunのパス値でmailgunAPIPathと呼ばれる文字列としてKeys.plistである:

https://API:key-<my key>@api.mailgun.net/v3/<my domain>.com/messages? 

希望、これは誰にもMailGunの問題を有し、サードパーティを回避したいというの解決策を提供しています溶液!

関連する問題