iOS 中的 HTTP POST 请求 [关闭]

2024-01-11

嗨,我是 ios 新手,直到现在我还没有向 php 发送任何调用,今天我尝试了以下代码

-(void)sendRequest
{

NSString *vali = @"$uppl!3r$";

NSString *post = [NSString stringWithFormat:@"key1=%@",vali];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"%@",postLength);
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.ddemo3.enerjinet.com/webservices/ios/suppliers.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if (theConnection) {
    webData = [[NSMutableData data] retain];
    NSLog(@"%@",webData);
}
else
{

}
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
  {
        [webData setLength: 0];
   }

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webData appendData:data];

}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[connection release];
[webData release];

}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:                       [webData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",loginStatus);
//greeting.text = loginStatus;
[loginStatus release];
[connection release];
[webData release];
}

它应该返回 76 条记录的数组,但它返回了我<>谁能帮帮我吗 ? Web 服务已准备就绪,我需要获取数组响应并将其显示在我的表格视图中,请帮助我执行此操作


有几点想法:

  1. You NSLog your webData,这将始终显示<>(因为您在实例化后立即记录它)。我不确定你为什么要记录它。

问题是你是否看到了<>, 或者NSLog in connectionDidFinishLoading.

  1. 我这么问是因为你没有记录error in connection:didFailWithError:,如果失败了,你永远不知道为什么。你真的应该记录error in connection:didFailWithError:这样你就知道它是否失败了,如果失败了,为什么:

     NSLog(@"%s: %@", __FUNCTION__, error);
    
  2. In your connection:didReceiveResponse:,你真的应该看看HTTP 状态码 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html:

     if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
         NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
    
         if (statusCode != 200)
             NSLog(@"%s: status code is %d; should be 200", __FUNCTION__, statusCode);
     }
    

如果不是 200,你真的很想知道。

  1. 您在您所看到的评论之一中报告了connectionDidFinishLoading:打电话过,但从来没有didReceiveData叫。这意味着(毫不奇怪)没有收到数据。所以,你应该:
  • 确认connection:didReceiveResponse:报告了一个statusCode of 200; and

  • 确认服务器代码正常工作。我可以想象如果您的服务器 PHP 代码中有错误(由于服务器经常有错误而加剧了这种错误),我可以想象得到您所描述的行为display_errors关闭他们的php.ini file).


顺便说一句,如果可能与关联的值key1可能包含任何保留字符(如中定义第2节 https://www.rfc-editor.org/rfc/rfc3986#section-2RFC 3986),您应该使用百分比转义字符串CFURLCreateStringByAddingPercentEscapes. Thus:

NSString *post = [NSString stringWithFormat:@"key1=%@", [self percentEscapeString:vali]];

哪里,根据W3C 规范 http://www.w3.org/TR/html5/forms.html#application/x-www-form-urlencoded-encoding-algorithm for application/x-www-form-urlencoded,您不仅可以百分比转义,还可以将空格替换为+字符,因此:

- (NSString *)percentEscapeString:(NSString *)string
{ 
    NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                 (CFStringRef)string,
                                                                                 (CFStringRef)@" ",
                                                                                 (CFStringRef)@":/?@!$&'()*+,;=",
                                                                                 kCFStringEncodingUTF8));
    return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 中的 HTTP POST 请求 [关闭] 的相关文章

随机推荐

  • Django - ModelForm:添加不属于模型的字段

    注意 使用django crispy forms我的表格的图书馆 如果您有解决我的问题的方法 但不使用cripsy forms图书馆 我仍然接受它 不要试图挑剔 只需要一个解决方案 解决方法 谢谢 在我的表格中Meta我班设定了模型 Dri
  • 我有什么选择来寻找 Monotouch 异常,例如“System.Exception:在已被 GC 处理的托管对象上从 Objective-c 调用的选择器”?

    我在下面得到了一些例外情况 我有什么选择来追踪这些问题 我对这些感到有点迷失 因为它们只是偶尔发生 并且仅在设备上发生 但从未在模拟器中发生 System Exception Selector invoked from objective
  • 为什么我不能在单词边界旁边使用重音字符?

    我正在尝试制作一个与人名匹配的动态正则表达式 它对大多数名称都没有问题 直到我在名称末尾遇到重音字符 示例 一些奇特的名字 到目前为止我使用的正则表达式是 b Fancy Nam Nam b i 像这样使用 Goal Some Fancy
  • as3数组按索引删除

    我有一个数组 cat dog budgie 并想通过索引删除该项目 此刻我有 function removeit myindex animals myindex animals pop 你想要拼接 http help adobe com e
  • 如何过滤子文档数组?

    我有一个结构如下的文档 id ObjectId 564d2702d4c68225cb00726f list a NumberInt 1 test public a NumberInt 2 test public a NumberInt 3
  • 返回按其他列分组的第一个非空值

    How to go from left to right Basically for each TIME person combo I need the first non null value from the id columns 聚合
  • Doctrine2 忽略数据库表

    我正在使用 Doctrine 2 我想生成数据库的 ORM 但我不想选择数据库的所有表 例如 在此数据库中 表1没有主键 表2 正常情况 我想使用此命令仅选择表 2 doctrine mapping convert from databas
  • 生成 PDF 文件,绘制带圆角的多边形

    如果我想编写一个生成以下结果的 Python 脚本 那么什么工具适合这项工作呢 PDF 格式的矢量图形 特别是 我需要绘制填充带圆角的多边形 即由直线和直线组成的平面图形圆弧 看起来绘图库 http matplotlib sourcefor
  • 在 Rebol 中,逐行读取文本文件的惯用方法是什么?

    为了逐行读取文本文件 而不将整个文件加载到内存中 在 Rebol 中执行此操作的常用方法是什么 我正在执行以下操作 但我认为 如果我错了 请纠正我 它首先将整个文件加载到内存中 foreach line read lines file tx
  • 字符串上的模式匹配

    我想知道是否有办法在 c 7 中执行类似的操作 var test aaeag switch test case test StartsWith a break default break 遗憾的是 这看起来不可能 这是正确的还是我做错了什么
  • 将 SQL 语句存储在属性文件中以供 Python 脚本使用?

    我不知道如何最好地表达这个问题 但我会尝试 我有几个通过 crontab 执行的 python 脚本 这些脚本执行一些数据库操作 例如选择和更新 在不同的数据库上 并且有些脚本使用相同的 SQL 语句 就目前情况而言 我使用了 SQL 查询
  • 轮播引导程序不起作用

    有人可以帮助我吗 我正在测试引导轮播 但它不起作用 具体来说 上一张 下一张按钮不起作用 轮播不会滑到下一张幻灯片 这是我页面的代码 但我不知道我做错了什么
  • 如何在powerapps中设置下拉菜单的默认值

    我在 powerapps 中有一个下拉菜单 需要设置默认值 My Items我将下拉列表的属性链接到我的数据源 Azure 表 dbo ColorTable 可以看到内容简化如下 Table ColorName red ID 1 Color
  • 您在编写网页时使用哪种文档类型?

    我只是对 Google Yahoo 和 Stackoverflow 中的 doctype 使用感到好奇 我发现上述3个网站使用HTML4 01 doctype 很多人说我们应该使用XHTML1 0 doctype 但上述3个网站没有这样做
  • 如何在SQL Server 2005数据库之间传输sql加密数据?

    我有一个现有的 SQL Server 2005 数据库 其中包含使用对称密钥加密的数据 对称密钥使用密码打开 我正在对使用该数据库的前端应用程序进行升级 其中包括添加数十个新表 存储过程 UDF 等 以及对现有表和数据库对象进行数十项修改
  • 使用 LinQ 合并 2 不同类型的列表

    我有 2 个清单 如果它们都是类型string 我可以使用以下方法合并它们 List
  • DataTables:如果标题中有复选框和弹出控件,如何避免列排序?

    我有一个 DataTables 表 其中一些标题列中有复选框和弹出窗口 另外我也使用FixedColumn和ColReorder插件 我在 jsfiddle 中的模型位于底部 我的问题是 如果用户尝试检查复选框或推送弹出窗口 排序事件就会接
  • 将矩阵分割成小矩阵块的方法

    我有一个问题 想知道是否有人可以提供理想的解决方案 基本上 小数据 但是 如果我有一个像这样的矩阵 0 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 然后 我需要将该矩阵分割成与第二个矩阵大小相同的块 在本例中为 2x2 0
  • C语言中如何检查内存地址是否32位对齐

    我的问题有两个部分 首先 作为这个地址空间的新手 我想知道地址的内存对齐的含义是什么 我用谷歌搜索了一下 但也想在这里问这个问题 因为我发现这里的答案非常有用 我的问题的第二部分与对齐和编程有关 如何确定地址是否是 4 字节对齐的 我在某处
  • iOS 中的 HTTP POST 请求 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 嗨 我是 ios 新手 直到现在我还没有向 php 发送任何调用 今天我尝试了以下代码 void sendRequest NSStri