2016-02-12 2 views
0

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

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

Объективный 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]; 

РНР Web Server Code

<?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 и завиток. Я делал это на Mac, и по умолчанию OSX имеет предварительно установленные библиотеки завитка. Обратите внимание, что приведенный ниже пример является синхронным - он запускает выполнение программы до завершения вызова сервера. (Я желал это в моем случае. - вы не можете)

C++ код клиента (класс)

#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 
Смежные вопросы