httpclient如何传递数组参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpclient如何传递数组参数相关的知识,希望对你有一定的参考价值。

最近在使用httpclient,在用post方式向服务器传值时,代码如下:
HttpPost httpPost = new HttpPost(hturl);
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("name", "admin"));
formparams.add(new BasicNameValuePair("password", "123456"));

UrlEncodedFormEntity uefEntity;
uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPost.setEntity(uefEntity);
httpClient.execute(httpPost);
以上是单值的传递,但在遇到如网页中type="checkbox",此时会有多个结果值向服务器传送,请问这种该怎么传值,用哪个类和方法,请各位大侠帮帮忙,救急!!!

formparams.add(new BasicNameValuePair("str", "str"));
这个方法传的值,服务器接收时可为字符串值,也可为数组值,不需另用方法
参考技术A 加一个for循环就可以
for (int i = 0; i < checkbox.length; i++)
nameValuePairs.add(new BasicNameValuePair("checkbox[]",checkbox[i]));

如何在 Json 请求的参数中传递 ID 数组

【中文标题】如何在 Json 请求的参数中传递 ID 数组【英文标题】:How to pass an Array of IDs in parameter in Json Request 【发布时间】:2015-10-26 10:39:31 【问题描述】:

我有一个 JSON 请求和一些参数...我需要在其中一个参数中传递一个数组...如何?

这是我当前的请求...我有 3 个参数:纬度、经度和数组:数组必须是一个 id 数组(int)

数组:NSArray arrayIds = [NSArrayWithObjects:@"1", @"2", @"3", nil];

  -(void) listarAtracoesBusca

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
    self.listaAtracoes = [[NSMutableArray alloc]init];
    self.indiceAtracaoAtual = 0;
    NSString *urlStr = @"";
    float latitude = 0.0;
    float longitude = 0.0;

    if(appDelegate.latitudeAtual)
        latitude = appDelegate.latitudeAtual;
    if(appDelegate.longitudeAtual)
        longitude = appDelegate.longitudeAtual;

    [self validarCamposBusca];

    urlStr = [NSString stringWithFormat:@"https://host:3000/api/ params?latitude=%f&longitude=%f&array=", latitude, longitude, arrayIds];


    NSURL *URL = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:10.0];
    [request setValue:@"haadushdiuashud" forHTTPHeaderField:@"X-User-Authorization"];
    NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", @"user", @"pass"];
    NSString *authValue = [NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)];

    [request setValue:authValue forHTTPHeaderField:@"Authorization"];
    request.HTTPMethod = @"GET";
    [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 

                               //Do Stuff

                               if (data.length > 0 && error == nil)
                               

                               else 
                                   NSLog(@"erro: %@", error.description);
                               
                           ];

【问题讨论】:

数组中有哪些值?您要创建的 URL 是什么? 任意数组:NSArray arrayIds = [NSArrayWithObjects:@"1", @"2", @"3", nil];例如 您是否将此 JSON 作为此请求的主体传递?你看过NSJSONSerialization吗? 好的。您尝试形成的确切 URL 是什么? 该网址仅在本地可用 【参考方案1】:

如果您尝试实现查询 url 之类的东西,那么您可以使用 NSURLQueryItem 来表示 URL 查询部分的单个键/值对。

NSURLComponents *components = [NSURLComponents componentsWithString:@"http://***.com"];
NSURLQueryItem *search = [NSURLQueryItem queryItemWithName:@"q" value:@"ios"];
NSURLQueryItem *count = [NSURLQueryItem queryItemWithName:@"count" value:@"10"];
components.queryItems = @[ search, count ];
NSURL *url = components.URL; // http://***.com?q=ios&count=10

否则,您需要使用 NSJSONSerialization 将 JSON 作为请求正文传递。详情请参考here。

【讨论】:

以上是关于httpclient如何传递数组参数的主要内容,如果未能解决你的问题,请参考以下文章

JAVA发送HttpClient

Angular httpclient 查询参数作为来自数组的批处理请求

如何将多个 HttpClient 参数传递/注入到类型化的 HttpClientClass?

Angular 12 Httpclient jsonp - 如何传递自定义回调参数?

Angular - 如何正确使用服务、HttpClient 和 Observables 在我的应用程序周围传递对象数组

java: apache HttpClient > 如何禁用重试