固定:谢谢伊戈尔 修复在底部。
我想使用VS 2008向Android发送意图。我想,这不是一个更简单的要求。虽然Openssl正在崩溃,但它很好奇。让我们从代码开始:
#include <stdio.h>
#include <conio.h>
#include <curl/curl.h>
#include <string>
#include <iostream>
using namespace std;
#pragma comment( lib, "ws2_32.lib" )
int main(void)
{
CURL *curl;
CURLcode res = CURL_LAST;
curl_global_init( CURL_GLOBAL_DEFAULT );
curl = curl_easy_init();
if(curl)
{
string website = "https://android.googleapis.com/gcm/send";
const char* headers [] = { "Content-Type: application/json", "Authorization:key=..." };
string json = "{ 'registration_ids':['...']}";//, 'data':'none'}";
curl_easy_setopt( curl, CURLOPT_URL, website.c_str() );
curl_easy_setopt( curl, CURLOPT_HTTPHEADER, headers );
//curl_easy_setopt( curl, CURLOPT_POSTFIELDS, json.c_str() ); << not currently needed
curl_easy_setopt( curl, CURLOPT_SSL_VERIFYPEER, FALSE ); // --insecure or -k
try
{
res = curl_easy_perform( curl ); << crashes here!
}
catch( ... ) {}
其余的代码实际上并不重要,而且这段代码是样板文件。崩溃点位于curl_easy_perform。错误是:
Unhandled exception at 0x61524ffb in HTTPS_sender01.exe: 0xC0000005:
Access violation reading location 0x68747541.
所以这在curllib.dll
深处崩溃,似乎是对openssl的调用,但我无法确定。但是,如果我注释掉选项CURLOPT_SSL_VERIFYPEER
,那么这运行正常但是android服务器因为没有证书而拒绝我。
下载源几乎无处可去,因为这需要openssl,谁知道在哪里下载正确的版本(我找到了大约30个站点...所有包含GunWin32的不同版本,我现在有这么多的下载文件夹,我不知道该怎么做)。我也不知道哪些版本的libs用于libcurl for vs 2008.经过几天的查看,我认为我会寻求指导或帮助。
对于来自visual studio的https for android的任何想法。顺便说一句,我最终需要将它移植到linux,所以任何建议都可能有用。
libcurl从这里下载:http://www.dll-files.com。包含和来源来自7.19.3。这个lib附带了一个openssl版本......我复制了这里的说明...... http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/
另外,我确实尝试使用libcurl中的openssl证书...开源证书,并且Android.google拒绝了:
curl_easy_setopt( curl, CURLOPT_CAPATH, "C:/projects/libraries/libcurl/curl-ca-bundle.crt");
FIX:
struct curl_slist *slist=NULL;
int numHeaders = sizeof( headers) / sizeof(headers[0]);
for( int i=0; i<numHeaders; i++ )
{
slist = curl_slist_append( slist, headers[i] );
}
curl_easy_setopt( curl, CURLOPT_HTTPHEADER, slist );
答案 0 :(得分:2)
CURLOPT_HTTPHEADER
选项不接受您似乎相信的char*
指针数组,但curl_slist*
指针是从curl_slist_append
获得的。