Httpclient 4.3.6:无效的重定向URI

时间:2015-07-06 12:47:34

标签: java apache-httpclient-4.x

我在httpclient 4.3.6配置中使用LaxRedirectStrategy。在DefaultRedirectStrategy类内重定向后,它在DefaultRedirectStrategy类的createlocationURI方法中创建位置。由于非法字符,因此该URL“/harborone0457/Profile%20-%20{0}.aspx”失败。 任何帮助如何解决它。以下是日志

Caused by: org.apache.http.ProtocolException: Invalid redirect URI: /harborone0457/Profile%20-%20{0}.aspx
at org.apache.http.impl.client.DefaultRedirectStrategy.createLocationURI(DefaultRedirectStrategy.java:197)
at org.apache.http.impl.client.DefaultRedirectStrategy.getLocationURI(DefaultRedirectStrategy.java:145)
at org.apache.http.impl.client.DefaultRedirectStrategy.getRedirect(DefaultRedirectStrategy.java:217)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:119)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
... 8 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 29: /harborone0457/Profile%20-%20{0}.aspx
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.checkChars(URI.java:3021)
at java.net.URI$Parser.parseHierarchical(URI.java:3105)
at java.net.URI$Parser.parse(URI.java:3063)
at java.net.URI.<init>(URI.java:588)
at org.apache.http.impl.client.DefaultRedirectStrategy.createLocationURI(DefaultRedirectStrategy.java:186)
... 15 more

1 个答案:

答案 0 :(得分:1)

问题是需要对大括号char * binaryBaseChange (char * bin, int size_of_digit) { int offset = 0; int i = 0; int j = 4; int k = 0; int number_of_hex_digits = 0; char* substr; char * out; int r = 0; while(((strlen(bin) + offset) % size_of_digit) != 0) { offset++; } out = malloc((strlen(bin) + offset) / size_of_digit+1); out[(strlen(bin)+offset)/size_of_digit] = '\0'; r = (int)strlen(bin) + offset; bin = pad_bin(bin, r); number_of_hex_digits = (int)strlen(bin)/size_of_digit; while (k < number_of_hex_digits) { substr = strndup(bin+i, j); substr[size_of_digit] = '\0'; i = i + size_of_digit; j = j + size_of_digit; if (size_of_digit == 4) { out[k] = single_digit_bin_to_hex(substr); } else if (size_of_digit == 3) { out[k] = single_digit_bin_to_oct(substr); } free(substr); k++; } free(bin); out[k] = '\0'; return out; } char single_digit_bin_to_oct (char * bin_dig) { if (strcmp(bin_dig, "000") == 0) { return '0'; } else if (strcmp(bin_dig, "001") == 0) { return '1'; } else if (strcmp(bin_dig, "010") == 0) { return '2'; } else if (strcmp(bin_dig, "011") == 0) { return '3'; } else if (strcmp(bin_dig, "100") == 0) { return '4'; } else if (strcmp(bin_dig, "101") == 0) { return '5'; } else if (strcmp(bin_dig, "110") == 0) { return '6'; } else { return '7'; } } char single_digit_bin_to_hex (char *bin_dig) { if (strcmp(bin_dig, "0000") == 0) { return '0'; } else if (strcmp(bin_dig, "0001") == 0) { return '1'; } else if (strcmp(bin_dig, "0010") == 0) { return '2'; } else if (strcmp(bin_dig, "0011") == 0) { return '3'; } else if (strcmp(bin_dig, "0100") == 0) { return '4'; } else if (strcmp(bin_dig, "0101") == 0) { return '5'; } else if (strcmp(bin_dig, "0110") == 0) { return '6'; } else if (strcmp(bin_dig, "0111") == 0) { return '7'; } else if (strcmp(bin_dig, "1000") == 0) { return '8'; } else if (strcmp(bin_dig, "1001") == 0) { return '9'; } else if (strcmp(bin_dig, "1010") == 0) { return 'A'; } else if (strcmp(bin_dig, "1011") == 0) { return 'B'; } else if (strcmp(bin_dig, "1100") == 0) { return 'C'; } else if (strcmp(bin_dig, "1101") == 0) { return 'D'; } else if (strcmp(bin_dig, "1110") == 0) { return 'E'; } else if (strcmp(bin_dig, "1111") == 0){ return 'F'; } else { fprintf(stderr, "ERROR"); return 'X'; } } char * pad_bin (char * bin, int n) { int bin_len = (int)strlen(bin); int dif = n - bin_len; char * new_bin = malloc(n + 1); int i = 0; int j = 0; memset(new_bin,0,n+1); if (n == 0) { return bin; } else for (;i <= n; i++) { if (i < dif) { new_bin[i] = '0'; } else { new_bin[i] = bin[j]; j++; } } return new_bin; } 进行编码才能形成有效的网址:

{

URI编码的完整列表可用here