向谷歌表单发送 POST 请求

问题描述 投票:0回答:3

我想向

Google Form
发出 POST 请求,但我遇到了未找到的页面。我正在关注 this 指南,了解如何设置 POST 请求。

我正在使用这个

Google Form
https://docs.google.com/forms/d/1knZJE-3afDGgW9Sqg6Cf6WiMdCSDAkgvi-wc6aRXV3k/viewform

表单有3个字段和一些隐藏的输入字段,例如教程没有提到的draftResponse和pagehistory。

let url = NSURL(string: "https://docs.google.com/spreadsheets/d/1YrQ71fhsX4XQtwV8qHpoHreBeyl1EnNo2pvafsoygtk/edit#gid=990368688")

var request = NSMutableURLRequest(URL: url!)
let session = NSURLSession.sharedSession()

request.HTTPMethod = "POST"

var fieldsToPost = "entry.1959479545=test1&entry.354177126=test2&[email protected]" as NSString

request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")

request.HTTPBody = fieldsToPost.dataUsingEncoding(NSUTF8StringEncoding)

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in

    println("Response \(response)")

    var strData = NSString(data: data, encoding: NSUTF8StringEncoding)

    println(strData)

    if error == nil {
      println("error")
    }

  })


task.resume()

不确定我的 POST 信息是否正确或我的实施。大家觉得呢?

下面是我的

Google Form
页面源输入字段:

input type="text" name="entry.1959479545" value="" class="ss-q-short" id="entry_1959479545" dir="auto" aria-label="First Name  " title=""
input type="text" name="entry.354177126" value="" class="ss-q-short" id="entry_354177126" dir="auto" aria-label="Last Name  " title=""
input type="hidden" name="draftResponse" value="[,,"-7091411838997769820"]"
input type="hidden" name="pageHistory" value="0"
input type="hidden" name="fbzx" value="-7091411838997769820"
swift post nsurlrequest nsurlsession google-forms
3个回答
3
投票

我在我正在从事的一个实用程序项目中完成了这项任务,在这个 repo 中查看它:https://github.com/goktugyil/QorumLogs

这里是如何设置它的教程: https://github.com/goktugyil/QorumLogs/blob/master/Log%20To%20GoogleDocs.md

这是执行此操作的代码:

private static func sendError(#text: String) {
    var url = NSURL(string: formURL)
    var postData = formField1 + "=" + text
    postData += "&" + formField2 + "=" + "anothertext"                
    postData += "&" + formField3 + "=" + "anothertext" 
    postData += "&" + formField4 + "=" + "anothertext" 

    var request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
    var connection = NSURLConnection(request: request, delegate: nil, startImmediately: true)
}

一个常见的错误是使用输入表单的“名称”字段,但是您应该使用“id”。


0
投票

斯威夫特 4+

Alamofire

的帮助下现在更容易做到这一点
  1. 查看您的表单源代码以获取您的表单 URl 和每个表单字段的标题。
  2. 为每个项目创建插入字段 ID 的数据变量。
  3. 使用简单的 POST 请求提交代码。
let data = ["entry.123123123": suggestedActivities, "entry.123124214": suggestedImprovements]

Alamofire.request(googleFormURL, method: .post, parameters: data).validate()
    .responseString {
        response in
        // do your magic
    }

0
投票

(斯威夫特 5)

   private func postRequest2(name: String, email: String, phoneNumber: String, note: String){
        var url = "https://docs.google.com/forms/d/19MbGnGA54cj9nobK5FxvRNcXJ-Gtudb_xSA3VChzSxU/formResponse?entry.631576183=\(name)&entry.922538006=\(email)&entry.836974774=\(phoneNumber)&entry.526236259=\(note)"

        var request = URLRequest(url: URL(string: url)!,timeoutInterval: Double.infinity)
        request.addValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.httpMethod = "POST"

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
          guard let data = data else {
            print(String(describing: error))
            return
          }
          print(String(data: data, encoding: .utf8)!)
        }

        task.resume()
    }

为我工作 检查:https://docs.google.com/spreadsheets/d/1rYRStyI46L2sjiFF9DTDMlCb2qR2FMtKrZk3USRdXkA/edit#gid=1864592081

© www.soinside.com 2019 - 2024. All rights reserved.