Http POST в форму google

Мне нужно отправить Http POST в мою форму google и, следуя совету (http://productforums.google.com/forum/#!topic/docs/iCfNwOliYKY) Я создал следующий синтаксис URL:

https://docs.google.com/forms/d/MY_FORM_ID&entry.2087820476=hello&entry.261928712=dear&submit=Submit

В конце концов я сделаю POST с iOS и Android, но я тестирую его просто в браузере, и он не работает. Я получаю ответ Google Диска, в котором говорится: «Извините, запрошенный вами файл не существует». и запись не попадает в мою таблицу ответов.

Что мне не хватает? Я смотрел везде, но ничего не ответил на этот вопрос.

РЕДАКТИРОВАТЬ:

Думаю, иногда лучше тестировать прямо на целевой платформе. Следующий код работает для iOS:

NSString *post = @"&key1=val1&key2=val2";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://docs.google.com/forms/d/MY_FORM_ID/formResponse"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSError alloc] init];
[NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

person Eddy    schedule 06.08.2013    source источник


Ответы (4)


Отправить POST на следующий URL

https://docs.google.com/forms/d/e/[FORM_ID]/formResponse?entry.1098499744=AnswerField1&entry.1090138332=AnswerField2

Вы можете найти свой FORM_ID в URL-адресе при предварительном просмотре формы.

Чтобы получить идентификаторы полей, проверьте атрибут «имя» каждого входного тега. Или запустите следующий скрипт в консоли на странице формы.

function loop(e){
if(e.children)
    for(let i=0;i<e.children.length;i++){
        let c = e.children[i], n = c.getAttribute('name');
        if(n) console.log(`${c.getAttribute('aria-label')}: ${n}`);
        loop(e.children[i]);
     }
}; loop(document.body);

Должен напечатать что-то подобное в вашей консоли

Field1: entry.748645480
Field2: entry.919588971
person brunettdan    schedule 22.11.2017

Я выполнил эту задачу с помощью Swift. Проверьте это в этом репозитории: 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 = form1Bar + "=" + text
    postData += "&" + form2Bar + "=" + "anothertext"                
    postData += "&" + form3Bar + "=" + "anothertext" 
    postData += "&" + form4Bar + "=" + "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)
}
person Esqarrouth    schedule 17.09.2015

Попробуйте отладить и проверить конечный URL-адрес, он должен быть примерно таким: ="nofollow">https://docs.google.com/forms/d/YOUR_FORM_ID/formResponse?entry.1748727384=test&entry.1949164265=test&submit=Отправить

person Waran-    schedule 18.10.2015

Если вы посмотрите на форму с помощью инструментов разработчика Google Chrome или инструментов любого браузера, вы увидите, что у каждого элемента управления есть имя. Пример: name='entry.123456789'

В C# вы можете установить ответы в форме следующим образом:

private static void PostToForm()
{
    WebClient client = new WebClient();

    var keyValue = new NameValueCollection();
    keyValue.Add("entry.123456789", "My answer #1");
    keyValue.Add("entry.987654321", "My answer #2");

    Uri uri = new Uri("https://docs.google.com/forms/d/[form id]/viewform");

    byte[] response = client.UploadValues(uri, "POST", keyValue);
}

Вы также можете установить ответы в URL:

https://docs.google.com/forms/d/[form id]/viewform?entry.123456789=Answer1&entry.987654321=Answer2
person Karl Gjertsen    schedule 23.11.2015