Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过HTTP后混合C++和Objo C在iPhone上保存cookie_Iphone_Objective C_Http_Post_Cookies - Fatal编程技术网

通过HTTP后混合C++和Objo C在iPhone上保存cookie

通过HTTP后混合C++和Objo C在iPhone上保存cookie,iphone,objective-c,http,post,cookies,Iphone,Objective C,Http,Post,Cookies,我一直在使用openFrameworks解决论坛上发布的一个问题: www.openframeworks.cc/forum/viewtopic.php?f=8&t=4765 本质上,我使用了一组XHTPUTILS文件,它使用poco发布到web表单。 我使用的示例代码位于: github.com/arturoc/ofxhtputils/blob/gh-pages/example/src/testApp.cpp 我想发布到一个登录页面,一个用户名和密码,然后我的目标是从响应中删除文本。。。这就是目

我一直在使用openFrameworks解决论坛上发布的一个问题: www.openframeworks.cc/forum/viewtopic.php?f=8&t=4765

本质上,我使用了一组XHTPUTILS文件,它使用poco发布到web表单。 我使用的示例代码位于: github.com/arturoc/ofxhtputils/blob/gh-pages/example/src/testApp.cpp

我想发布到一个登录页面,一个用户名和密码,然后我的目标是从响应中删除文本。。。这就是目标,通过iPhone应用程序

我遇到的问题是饼干。ofxHttpUtils插件没有任何从帖子中记住cookie的方法,因此我得到的响应只是登录页面。我已经搜索了一些方法来尝试捕获cookie,这里的Objective C中似乎有一些东西,从另一个post到堆栈溢出:

NSHTTPURLResponse   * response;
NSError             * error;
NSMutableURLRequest * request;
request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://temp/gomh/authenticate.py?setCookie=1"]
                                        cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                    timeoutInterval:60] autorelease];

[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];    
NSLog(@"RESPONSE HEADERS: \n%@", [response allHeaderFields]);

// If you want to get all of the cookies:
NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://temp"]];
NSLog(@"How many Cookies: %d", all.count);
// Store the cookies:
// NSHTTPCookieStorage is a Singleton.
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:all forURL:[NSURL URLWithString:@"http://temp"] mainDocumentURL:nil];

// Now we can print all of the cookies we have:
for (NSHTTPCookie *cookie in all)
    NSLog(@"Name: %@ : Value: %@, Expires: %@", cookie.name, cookie.value, cookie.expiresDate); 


// Now lets go back the other way.  We want the server to know we have some cookies available:
// this availableCookies array is going to be the same as the 'all' array above.  We could 
// have just used the 'all' array, but this shows you how to get the cookies back from the singleton.
NSArray * availableCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://temp"]];
NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:availableCookies];

// we are just recycling the original request
[request setAllHTTPHeaderFields:headers];

request.URL = [NSURL URLWithString:@"http://temp/gomh/authenticate.py"];
error       = nil;
response    = nil;

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"The server saw:\n%@", [[[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding] autorelease]);

我不知道如何/在哪里实现这一点,这样我就可以与我的OFXHTPUTILS代码集成,以便在调用受密码保护的站点时记住并提供cookie。有人能帮忙吗?我知道这个要求有点不具体。。。我希望您能看到我正在尝试做什么…

因为您已经在使用了,所以坚持使用它可能会更简单。您将不得不扩展XHTPutils来处理cookies,或者使其更智能,以便智能地处理cookies,或者让它保持沉默,同时让您根据需要抓取和设置cookies。Net是XHTPUTILS的基础,它对cookie没有问题——它包括如下函数

最直接的方法是愚蠢的方法:

添加ofxHttpForm::setCookies以便您可以将cookies传递到模块中,并获取cookies以便模块可以访问它们 修改OfXhtPutils::doPostForm以从ofxHttpForm中提取cookie并将其设置在Poco HTTPRequest上 修改ofxHttpRequest构造函数以从Poco HTTPResponse中提取cookie,并为代码提供获取cookie的方法
然后,您的代码将抓取登录后发送回来的cookie,并在将来的所有请求中设置它们。

因为您已经使用了,所以坚持这样做可能会更简单。您将不得不扩展XHTPutils来处理cookies,或者使其更智能,以便智能地处理cookies,或者让它保持沉默,同时让您根据需要抓取和设置cookies。Net是XHTPUTILS的基础,它对cookie没有问题——它包括如下函数

最直接的方法是愚蠢的方法:

添加ofxHttpForm::setCookies以便您可以将cookies传递到模块中,并获取cookies以便模块可以访问它们 修改OfXhtPutils::doPostForm以从ofxHttpForm中提取cookie并将其设置在Poco HTTPRequest上 修改ofxHttpRequest构造函数以从Poco HTTPResponse中提取cookie,并为代码提供获取cookie的方法
然后,您的代码将获取登录后发送回来的cookies,并将它们设置为将来所有的请求。

嗨,Jeremy,谢谢您的回答。这是我的想法,但我不知道该怎么做。我认为这将涉及在OFXHTPUTILS中编写一个函数,如您所说。但我不确定我是否有足够的知识去做那件事!但我确实同意,混合上述两种类型的代码可能不是正确的做法。你有什么建议让我开始吗?谢谢again@sacculi我已经编辑了我的原始答案,提供了一个简单方法的概要,它基本上只是在OFXHTPUTILS层来回路由cookies。谢谢Jeremy。这些步骤非常有用,非常感谢。我尝试过各种方法来实现这些目标,但都很困难。比如,将cookie传递到新函数步骤1中,我想我需要从postForm函数中传递HTTPResponse,但我不能正确地做到这一点。你看,在我这方面存在一些概念上的差距。我还对它感兴趣,它似乎与我一直使用的OFXHTPUTILS具有相同的代码。我想知道如何使用它,比如:std::vector cookies;res.getCookies;然后,req.getCookies;在URL的HTTPRequest之后,而不是formpost函数。但正如我上面所说,我在这个层次上缺乏一些概念性的东西——我主要做简单的媒体艺术项目!但是我会让你知道我的进展,非常感谢我杰里米谢谢你的回答。这是我的想法,但我不知道该怎么做。我认为这将涉及在OFXHTPUTILS中编写一个函数,如您所说。但我不确定我是否有足够的知识去做那件事!但我确实同意,混合上述两种类型的代码可能不是正确的做法。你有什么建议让我开始吗?谢谢again@sacculi我已经编辑了我的原始答案,提供了一个简单方法的概要,它基本上只是在OFXHTPUTILS层来回路由cookies。谢谢Jeremy。步骤真的很简单
很有用,非常感谢。我尝试过各种方法来实现这些目标,但都很困难。比如,将cookie传递到新函数步骤1中,我想我需要从postForm函数中传递HTTPResponse,但我不能正确地做到这一点。你看,在我这方面存在一些概念上的差距。我还对它感兴趣,它似乎与我一直使用的OFXHTPUTILS具有相同的代码。我想知道如何使用它,比如:std::vector cookies;res.getCookies;然后,req.getCookies;在URL的HTTPRequest之后,而不是formpost函数。但正如我上面所说,我在这个层次上缺乏一些概念性的东西——我主要做简单的媒体艺术项目!但我会让你了解我的进展,非常感谢