java - tvs - अपाचे मॉडल




Apache HttpClient(4.1 और नए): बुनियादी प्रमाणीकरण कैसे करें? (4)

HttpClient लाइब्रेरी के डिफ़ॉल्ट क्लाइंट के लिए मैं मूल प्रमाणीकरण कैसे जोड़ूं? मैंने ऐसे उदाहरण देखे हैं, जहां वे client.getCredentialProvider() उपयोग करते हैं, हालांकि मुझे लगता है कि यह सभी तरीके लाइब्रेरी संस्करण 4.0.1 या 3.x के लिए हैं। क्या ऐसा करने का एक नया उदाहरण है? बहुत बहुत धन्यवाद।


4.3 के लिए एक और आधुनिक विकल्प धाराप्रवाह विस्तार का उपयोग करना है:

Executor executor = Executor.newInstance()
        .auth(new HttpHost("somehost"), "username", "password")
        .auth(new HttpHost("securehost", 443, "https"), "username", "password") // https example
        .auth(new HttpHost("myproxy", 8080), "username", "password")
        .authPreemptive(new HttpHost("myproxy", 8080));

String content = executor.execute(Request.Get("http://somehost/"))
        .returnContent().asString();

DefaultHttpClient में getCredentialsProvider () है, लेकिन HttpClient नहीं है। आपको HttpClient क्लाइंट के बजाय DefaultHttpClient क्लाइंट = ... घोषित करने की आवश्यकता है ...


मुझे मूल प्रमाणीकरण के साथ एक URL को लागू करने की यह आवश्यकता थी जो प्रॉक्सी सेटिंग्स की भी आवश्यकता थी। इसी से मेरा काम बना है।

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.StringReader;
    import java.util.HashMap;
    import java.util.Map;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;

    import org.apache.commons.httpclient.Credentials;
    import org.apache.commons.httpclient.HostConfiguration;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpMethod;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.UsernamePasswordCredentials;
    import org.apache.commons.httpclient.auth.AuthScope;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.w3c.dom.*;

    import javax.xml.parsers.*;


    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;

    public class TestResponse {

    public final static String TESTURL="https://myURL";
    private static final String PROXY_HOST = "www2.proxyXYS";
    private static final int PROXY_PORT = 8080;


    public static void main (String args[]) 
    {
    HttpClient client = new HttpClient();
    HttpMethod method = new GetMethod(TESTURL);
    HostConfiguration config = client.getHostConfiguration();
    config.setProxy(PROXY_HOST, PROXY_PORT);

      String username = "User";
      String password = "Pa55w0rd";


    Credentials credentials = new UsernamePasswordCredentials(username, password);
    AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);

    client.getState().setProxyCredentials(authScope, credentials);
    client.getState().setCredentials(AuthScope.ANY, credentials);

    try {
        client.executeMethod(method);

        String response = method.getResponseBodyAsString();

        if (method.getStatusCode() == HttpStatus.SC_OK) {
             response = method.getResponseBodyAsString();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        method.releaseConnection();
    }
}





}

हम HttpClient साथ बुनियादी प्रमाणीकरण करते हैं, लेकिन हम CredentialProvider उपयोग नहीं करते हैं। यहाँ कोड है:

HttpClient client = factory.getHttpClient(); //or any method to get a client instance
Credentials credentials = new UsernamePasswordCredentials(username, password);
client.getState().setCredentials(AuthScope.ANY, credentials);

अद्यतन: टिप्पणियों में कहा गया, HttpClient.getState() मेथोस एपीआई के संस्करण 3.x में उपलब्ध है। हालाँकि, API के नए संस्करण उस पद्धति का समर्थन नहीं करते हैं।





apache-httpcomponents