401 Error connecting to the PrestaShop internet service from android

I am trying to call a web service in PrestaShop, but I am getting a 401 invalid error. Even though I passed the username key. I also tried the authenticator, but I have an HttpRetryingError error.

Find below the code snippet of what I did.

Method One:

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)); } 

Method two

 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(); } 

I even tried passing the string as ws_key and the key value, and I even named the url as http: // keyvalue@domain.com / api / namehere

but it doesn’t work either. Please, help.

+2
android web-services prestashop
source share
1 answer

I know this is an old question, but I think I can help.

Check the .htaccess file. It should have lines like this:

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

The second line tells Apache how to handle authorization.

+2
source share

All Articles