{"id":514,"date":"2013-04-29T14:18:43","date_gmt":"2013-04-29T06:18:43","guid":{"rendered":"http:\/\/www.yeetrack.com\/?p=514"},"modified":"2013-09-27T22:36:43","modified_gmt":"2013-09-27T14:36:43","slug":"java-httpclient-%e6%a8%a1%e6%8b%9fntlm%e5%9f%9f%e7%99%bb%e5%bd%95","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=514","title":{"rendered":"Java httpclient \u6a21\u62dfNTLM\u57df\u767b\u5f55"},"content":{"rendered":"<p>NTLM\u662fNT LAN Manager\u7684\u7f29\u5199\uff0c\u662f\u5fae\u8f6fwindows\u7cfb\u7edf\u7684\u4e00\u79cd\u767b\u5f55\u8ba4\u8bc1\u673a\u5236\uff0c\u5e38\u7528\u505a\u57df\u5185\u4e3b\u673a\u7684\u81ea\u52a8\u8ba4\u8bc1\u3002\u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\uff0c\u516c\u53f8\u3001\u5b66\u6821\u7b49\uff0c\u90fd\u4f1a\u8981\u6c42\u63a5\u5165\u5185\u90e8\u7f51\u7684\u7535\u8111\u52a0\u5165\u57df\uff0c\u7528\u6237\u7684\u767b\u5f55\u540d\u3001\u5bc6\u7801\u90fd\u4fdd\u5b58\u5728\u57df\u4e2d\u670d\u52a1\u5668\u4e0a\u3002\u7b80\u5355\u6765\u8bf4\uff0c\u5f53\u7528\u6237\u9700\u8981\u767b\u5f55\u7cfb\u7edf\u65f6\uff0c\u670d\u52a1\u5668\u8fd4\u56de401\u9700\u8981\u8fdb\u4e00\u6b65\u6388\u6743\uff0c\u7136\u540e\u6d4f\u89c8\u5668\u548c\u670d\u52a1\u5668\u8fdb\u884c\u534f\u5546\uff0c\u786e\u8ba4NTLM\u7248\u672c\u7b49\u5185\u5bb9\uff0c\u7136\u540e\u670d\u52a1\u5668\u4f1a\u968f\u673a\u4ea7\u751f\u4e00\u4e2a\u5b57\u7b26\u4e32\uff08\u53eb\u505a\u6311\u6218\uff0cchallenge\uff09\uff0c\u53d1\u7ed9\u672c\u673a\uff0c\u672c\u673a\u4f1a\u4f7f\u7528\u4fdd\u5b58\u5728\u672c\u5730\u57df\u4e2d\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u5bf9\u5176\u52a0\u5bc6\uff0c\u7136\u540e\u5c06\u5bc6\u6587\u53d1\u9001\u7ed9\u670d\u52a1\u5668\uff0c\u670d\u52a1\u5668\u4e5f\u4f7f\u7528\u7528\u6237\u7684\u8d26\u53f7\u548c\u5bc6\u7801\u8fdb\u884c\u52a0\u5bc6\uff0c\u5c06\u4e24\u4e2a\u5bc6\u6587\u8fdb\u884c\u6bd4\u5bf9\uff0c\u5982\u679c\u5339\u914d\uff0c\u5c31\u767b\u5f55\u6210\u529f\u3002<!--more-->\u8be6\u7ec6\u8bf4\u660e\u89c1<a href=\"http:\/\/www.innovation.ch\/personal\/ronald\/ntlm.html\">http:\/\/www.innovation.ch\/personal\/ronald\/ntlm.html<\/a><\/p>\n<p>\u4e0b\u9762\u4f7f\u7528httpclient\u5305\uff0c\u7f16\u5199\u4ee3\u7801\u6765\u6a21\u62dfNTLM\u767b\u5f55\u8fc7\u7a0b\u3002<\/p>\n<p>package com.yeetrack.ntlm;<\/p>\n<pre><code>import java.io.IOException;\nimport java.util.List;\nimport java.util.ArrayList;\nimport org.apache.http.HttpEntity;\nimport org.apache.http.HttpHost;\nimport org.apache.http.HttpResponse;\nimport org.apache.http.ParseException;\nimport org.apache.http.auth.AuthScope;\nimport org.apache.http.auth.NTCredentials;\nimport org.apache.http.auth.params.AuthPNames;\n\nimport org.apache.http.client.ClientProtocolException;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.client.params.AuthPolicy;\nimport org.apache.http.conn.params.ConnRoutePNames;\nimport org.apache.http.conn.params.ConnRouteParams;\nimport org.apache.http.impl.client.DefaultHttpClient;\nimport org.apache.http.protocol.BasicHttpContext;\nimport org.apache.http.protocol.HttpContext;\nimport org.apache.http.util.EntityUtils;\n\n\/**\n * @author youthflies\n * yeetrack.com\n *\/\npublic class NtlmTest\n{\n\n    public static void main(String[] args)\n    {\n        DefaultHttpClient httpclient = new DefaultHttpClient();\n        List&lt;String&gt; authpref = new ArrayList&lt;String&gt;();\n        authpref.add(AuthPolicy.NTLM);\n        httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,    authpref);\n        \/\/\u53c2\u6570\u5206\u522b\u4e3a\u7528\u6237\u540d\u3001\u5bc6\u7801\u3001\u670d\u52a1\u5668url\u3001\u5de5\u4f5c\u57df\u540d\u79f0\n        NTCredentials creds = new NTCredentials(\"username\", \"password\",     \"serverName\", \"domain\");\n        httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);\n\n        \/\/\u8bbe\u7f6e\u8981\u8fde\u63a5\u7684\u76ee\u6807\u540d\u79f0\u3001\u7aef\u53e3\n        HttpHost target = new HttpHost(\"serverName\", 80, \"http\");\n\n        \/\/ Make sure the same context is used to execute logically related requests\n        HttpContext localContext = new BasicHttpContext();\n\n        \/\/ Execute a cheap method first. This will trigger NTLM authentication\n        HttpGet httpget = new HttpGet(\"\u76ee\u6807\u57df\u540d\u7684\u8be6\u7ec6url\uff1aserverName+\u7aef\u53e3+\u8def\u5f84\u7b49\");\n        \/\/\u4e0b\u9762\u662f\u4e3a\u8bf7\u6c42\u52a0\u4e0a\u4e00\u4e9bheader\u4fe1\u606f\uff0c\u6765\u4f2a\u88c5\u6d4f\u89c8\u5668\n        httpget.addHeader(\"Accept-Language\", \"zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3\");\n        httpget.addHeader(\"Accept\",\"image\/jpeg, application\/x-ms-application, image\/gif, application\/xaml+xml, image\/pjpeg, application\/x-ms-xbap, *\/*\");\n        httpget.addHeader(\"DNT\",\"1\");\n        httpget.addHeader(\"User-Agent\", \"Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\");\n        httpget.addHeader(\"Accept-Encoding\",\"gzip, deflate\");\n\n        try\n        {\n\n            HttpResponse response = httpclient.execute(httpget);\n            HttpEntity entity = response.getEntity();\n            System.out.println(EntityUtils.toString(entity));\n        } catch (ParseException e)\n        {\n            \/\/ TODO Auto-generated catch block\n            e.printStackTrace();\n        } catch (IOException e)\n        {\n            \/\/ TODO Auto-generated catch block\n            e.printStackTrace();\n        }\n    }   \n}  \n<\/code><\/pre>\n<p>\u4f8b\u5b50\u91c7\u7528maven\u7ba1\u7406\uff0c\u4e0b\u9762\u662fpom.xml\u6587\u4ef6\u3002<\/p>\n<pre><code>&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\n&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n&lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n&lt;artifactId&gt;ntlm&lt;\/artifactId&gt;\n&lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n&lt;packaging&gt;jar&lt;\/packaging&gt;\n\n&lt;name&gt;ntlm&lt;\/name&gt;\n&lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\n\n&lt;properties&gt;\n    &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n&lt;\/properties&gt;\n\n&lt;dependencies&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;junit&lt;\/groupId&gt;\n        &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n        &lt;version&gt;3.8.1&lt;\/version&gt;\n        &lt;scope&gt;test&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.apache.httpcomponents&lt;\/groupId&gt;\n        &lt;artifactId&gt;httpclient&lt;\/artifactId&gt;\n        &lt;version&gt;4.3-beta1&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<p><!-- This document was created with MarkdownPad, the Markdown editor for Windows (http:\/\/markdownpad.com) --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>NTLM\u662fNT LAN Manager\u7684\u7f29\u5199\uff0c\u662f\u5fae\u8f6fwindows\u7cfb\u7edf\u7684\u4e00\u79cd\u767b\u5f55\u8ba4\u8bc1\u673a\u5236\uff0c\u5e38\u7528\u505a\u57df\u5185\u4e3b\u673a\u7684\u81ea\u52a8\u8ba4\u8bc1\u3002\u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\uff0c\u516c\u53f8\u3001\u5b66\u6821\u7b49\uff0c\u90fd\u4f1a\u8981\u6c42\u63a5\u5165\u5185\u90e8\u7f51\u7684\u7535\u8111\u52a0\u5165\u57df\uff0c\u7528\u6237\u7684\u767b\u5f55\u540d\u3001\u5bc6\u7801\u90fd\u4fdd\u5b58&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[33],"tags":[8,7,5],"class_list":["post-514","post","type-post","status-publish","format-standard","hentry","category-coding","tag-java","tag-7","tag-5"],"views":9217,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=514"}],"version-history":[{"count":4,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/514\/revisions"}],"predecessor-version":[{"id":743,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/514\/revisions\/743"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}