我在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
答案 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