当我将 java 代码传输到有关连接到服务器并获得结果的 iOS 代码时有什么问题?



java代码如下,它即将连接到服务器并获取一些信息,您可以运行java代码并获得{"carrier":{"CFeeC":1,"COrderC":2,"CTaskC":3,"flag":1},"driver":{"DTaskC":1,"DTraceR":1、"flag":1},"userinfo":{"czBizOrgId":"30500002049,"czWebOrgId":545587,"hzBizOrgId:"30500000857","hzWebOrgId":545593,"用户电子邮件":"all@1.com","userId":545566,"userName":"all-all-all"},"return_code":"00","customer":{"flag":1,"hFeeC":1、"hOrderA":1和"hOrderC":1以及"hOrderS":1"hPlanM":1并且"hPlanS":1}}}空

但当我运行iOS代码时,破解了java代码,答案是{"exception":"Authenticated access required"}似乎我发送的参数,服务器没有得到?为什么?

    public static void main(String[] args) {
    System.out.println(test());
}
private static String test() {
    String username = "all@1.com";
    String password = "1";
        String path = new String("http://61.174.31.28:9091/api/jsonws/UnicomWL-portlet.tcdcolligate/user-login/password/1/email/all%401.com"); // ƴ�����URL��ַ
        //path = path.replace("+","%20");
    try {
        String authString =username + ":" +password;
        String authStringEnc = new String(Base64.encode(authString.getBytes()));
        URL url = new URL(path);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setRequestProperty("Authorization", "Basic " + authStringEnc);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                connection.getOutputStream());
        bufferedOutputStream.flush();
        bufferedOutputStream.close();
        if (connection.getResponseCode() != 200) {
            throw new RuntimeException("ResponseCode != 200");
        }
        BufferedInputStream bufferedInputStream = new BufferedInputStream(
                connection.getInputStream());
        int bytesRead = 0;
        byte[] buffer = new byte[1024];
        while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {

            String chunk = new String(buffer, 0, bytesRead);
            System.out.print(chunk);
        }
        connection.disconnect();
    }
    catch (Exception e) {
    }

    return  null;

但当我尝试使用iOS时,它错了,怎么了?谢谢

    int main(int argc, const char * argv[]) {
@autoreleasepool {
    // insert code here...
    NSLog(@"Hello, World!");
    NSData *authData=[@"all@1.com:1" dataUsingEncoding:NSUTF8StringEncoding];
    NSString *authStringEnc=[authData base64EncodedStringWithOptions:0];
    NSString *auth=[NSString stringWithFormat:@"Basic +%@",authStringEnc];
    NSLog(@"%@n",auth);
    NSString *path=@"http://61.174.31.28:9091/api/jsonws/UnicomWL-portlet.tcdcolligate/user-login/password/1/email/all%401.com";
    NSURL *url=[NSURL URLWithString:path];
    NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:url];
    NSData *returnData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *s=[[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",s);
}
return 0;

}

您需要这样做:

NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"username", @"password"];
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];

这是一个行之有效的示例项目。样本

最新更新