I have write REST wed service using jersey framework and java. If user want to request HttpGet in curl he need to write like:
curl -u username:password -H "Content-Type:application/...." http://localhost:8080/project/user
Now, I am implement android which will call web service.
Do anyone know how to use HttpClient in android to call web service?
How to set username and password in HttpClient in order to match with curl command -u username:passw开发者_运维问答ord
?
thanks
package com.android.demo;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* START Test/Play with beanstalk API */
String username = "user1";
String host = "my.host.com";
String password = "password";
String urlBasePath = "http://" + username + ".host.com/api/";
String urlApiCall_FindAllRepositories = urlBasePath
+ "repositories.xml";
try {
HttpClient client = new DefaultHttpClient();
AuthScope as = new AuthScope(host, 443);
UsernamePasswordCredentials upc = new UsernamePasswordCredentials(
username, password);
((AbstractHttpClient) client).getCredentialsProvider()
.setCredentials(as, upc);
BasicHttpContext localContext = new BasicHttpContext();
BasicScheme basicAuth = new BasicScheme();
localContext.setAttribute("preemptive-auth", basicAuth);
HttpHost targetHost = new HttpHost(host, 443, "https");
HttpGet httpget = new HttpGet(urlApiCall_FindAllRepositories);
httpget.setHeader("Content-Type", "application/xml");
HttpResponse response = client.execute(targetHost, httpget,
localContext);
HttpEntity entity = response.getEntity();
Object content = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Hope this code will help
@sudo try this simple code
HttpURLConnection conn = null;
try {
// The formated URL will be "http://www.androidcoder.org:80".
URL url = new URL(String.format("http://%s:%d/%s", mIpAddress, mPort, mSubPage));
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-length", "0");
conn.setUseCaches(false);
conn.setAllowUserInteraction(false);
conn.setConnectTimeout(TIMEOUT);
conn.setReadTimeout(TIMEOUT);
// NOTE: Below is used to perform the http authentication. It is working in JAVA but not
// always working in Android platform.
// Set to use the default HTTP authentication. Working in JAVA, but not working in
// Android.
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user1", "pass1".toCharArray());
}
});
conn.connect();
System.out.println(conn.getResponseCode()); // <-- The request will stop here if running
// in Android.
System.out.println(conn.getResponseMessage());
printOutput(conn);
} catch (MalformedURLException e) {
// TODO: Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// Operation timed out.
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
}
/**
* @brief print the output of the HTTP connection.
* @param conn [in] Http connection.
*/
private static void printOutput(HttpURLConnection conn) throws IOException {
int length = 256;
byte bytes[] = new byte[length];
InputStream is = conn.getInputStream();
while (is.available() > 0) {
if (is.available() < length) {
length = is.available();
}
conn.getInputStream().read(bytes, 0, length);
System.out.println(bytes);
}
}
精彩评论