2015-07-14 2 views
1

Я пытаюсь вызвать веб-сервис в PrestaShop, но я получаю 401 недопустимую ошибку. Даже несмотря на то, что я прошел ключ имени пользователя. Я тоже попробовал аутентификатор, но у меня ошибка HttpRetryingError.401 Ошибка при подключении к PrestaShop webservice от android

Найдите ниже фрагмент кода того, что я сделал.

Метод один:

final String username = "key_here"; 
final String password = "";// leave it empty 

URL urlToRequest = new URL(urlStr); 
urlConnection = (HttpURLConnection) urlToRequest.openConnection(); 
urlConnection.setDoOutput(true); 
urlConnection.setRequestMethod("GET"); 
urlConnection.setRequestProperty("Content-Type", 
"text/xml;charset=utf-8"); 

String authToBytes = username + ":" + password; 
//.... 
byte[] authBytes = org.apache.commons.codec.binary.Base64.encodeBase64(authToBytes.getBytes()); 
String authBytesString = new String(authBytes); 
//then your code 
urlConnection.setRequestProperty("Authorization","Basic " + authBytesString); 

int statusCode = urlConnection.getResponseCode(); ---> i get 401 
if (statusCode != HttpURLConnection.HTTP_OK) { 
// throw some exception 
InputStream in = 
new BufferedInputStream(urlConnection.getInputStream()); 
Log.e("tag", getResponseText(in)); 
} 

Метод два

final String username = "keyvaluehere"; 
final String password = "";// leave it empty 
String authToBytes = username + ":" + password; 
byte[] authBytes = org.apache.commons.codec.binary.Base64.encodeBase64(authToBytes.getBytes()); 
String authBytesString = new String(authBytes); 
HttpParams httpParameters = new BasicHttpParams(); 
// Set the timeout in milliseconds until a connection is established. 
// The default value is zero, that means the timeout is not used. 
int timeoutConnection = 30000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data. 
int timeoutSocket = 30000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
HttpClient httpclient = new DefaultHttpClient(httpParameters); 

HttpGet httpGet = new HttpGet(url); 
httpGet.setHeader("Authorization","Basic " +authBytesString); 
try { 
HttpResponse response = httpclient.execute(httpGet); 
String strResponse = EntityUtils.toString(response.getEntity()); 
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
return strResponse; 
} 
return strResponse; 
}catch(ClientProtocolException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 

Я даже пытался пропусканием строки как ws_key и KeyValue и я даже назвал URL как http://[email protected]/api/namehere

но это тоже не работает. Пожалуйста, помогите.

ответ

1

Я знаю, что это старый вопрос, но я думаю, что могу помочь.

Проверьте файл .htaccess. Он должен иметь такие строки, как эти:

RewriteRule . - [E=REWRITEBASE:/] 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
RewriteRule ^api$ api/ [L] 

RewriteRule ^api/(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L] 

Вторая строка сообщает Apache, как обрабатывать авторизацию.

Смежные вопросы