我有一个很长的base64编码文本字符串。它大约有1024个字符。从我的Objective C代码中,我想将它发送到我的PHP脚本,将它转储到日志中,并返回一个" OK"回复。我尝试了this cookbook example,但它只有一个上传和下载示例(并非两者兼而有之),而且在我的情况下它甚至不起作用。
如果我知道如何,我愿意将其转换为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 :(得分:0)
使用普通的C ++有一条更容易的路线。您必须将.m文件转换为.mm文件才能混合使用Objective C和C ++代码。
PHP代码很好,不需要修订。这是我使用的C ++示例。它使用了STL和卷曲。我在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