Отправка строки на веб-сервер, получение ответа

У меня есть длинная base64 закодированная текстовая строка. Это около 1024 символов. Из моего кода Objective C я хочу отправить его в мой PHP-скрипт, сделать так, чтобы он выгружал его в журнал и возвращал ответ «ОК». Я старался этот пример поваренной книги, но у него есть только пример загрузки и выгрузки (не оба вместе), и он даже не работает в моем случае.

Я был бы готов переключить это на решение C ++, если бы знал как.

NSString *sMessage = @"My Long Base64 Encoded Message";
NSString *sURL = "http://example.com/request.php";
NSURL *oURL = [NSURL URLWithString:sURL];

NSData *data = [NSData dataWithBytes:sMessage.UTF8String length:sMessage.length];

NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession]
dataTaskWithURL:oURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

NSLog(@"\n\nDATA\n\n%@",data);
NSLog(@"\n\nRESPONSE\n\n%@",response);
NSLog(@"\n\nERROR\n\n%@",error);

}];

[downloadTask resume];
<?php

error_reporting(E_ALL);
ini_set('display_errors','On');
$sRaw = file_get_contents('php://input');
file_put_contents('TEST.TXT',$sRaw);
die('OK');

0

Решение

Существует гораздо более простой маршрут с использованием обычного C ++. Вам нужно будет преобразовать ваш файл .m в файл .mm, чтобы можно было смешивать код Objective C и C ++.

PHP-код хорош и не требует пересмотра. Вот пример C ++, который я использовал, который работал. Он использовал STL и curl. Я делал это на Mac, и по умолчанию в OSX предустановлены библиотеки curl. Обратите внимание, что приведенный ниже пример является синхронным — он блокирует выполнение программы до завершения вызова сервера. (Я хотел этого в моем случае — вы не можете.)

#pragma once
#include <string>
#include <sstream>
#include <iostream>
#include <curl/curl.h>

class Webby {

public:

static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
std::string buf = std::string(static_cast<char *>(ptr), size * nmemb);
std::stringstream *response = static_cast<std::stringstream *>(stream);
response->write(buf.c_str(), (std::streamsize)buf.size());
return size * nmemb;
}

static std::string sendRawHTTP(std::string sHostURL, std::string &sStringData) {

CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
std::stringstream response;
curl_easy_setopt(curl, CURLOPT_URL, sHostURL.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sStringData.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Webby::write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return response.str();
}
return "";
}

}; // end class
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]