各语言Basic Auth例子
<p>[TOC]</p>
<p><strong>!!!注意:以下例程为AI生成,请自行验证有效性。</strong></p>
<h2>Python</h2>
<ul>
<li>使用 requests 库</li>
</ul>
<pre><code class="language-python">import requests
url = &quot;https://api.example.com/data&quot;
auth = (&quot;username&quot;, &quot;password&quot;)
data = {&quot;key&quot;: &quot;value&quot;}
response = requests.post(url, auth=auth, json=data)
print(response.text)</code></pre>
<ul>
<li>原生 urllib(手动添加头)</li>
</ul>
<pre><code class="language-python">from urllib.request import Request, urlopen
import base64
url = &quot;https://api.example.com/data&quot;
credentials = base64.b64encode(b&quot;username:password&quot;).decode(&quot;utf-8&quot;)
headers = {
&quot;Authorization&quot;: f&quot;Basic {credentials}&quot;,
&quot;Content-Type&quot;: &quot;application/json&quot;
}
data = &#039;{&quot;key&quot;: &quot;value&quot;}&#039;.encode()
request = Request(url, data=data, headers=headers, method=&quot;POST&quot;)
response = urlopen(request)
print(response.read().decode())</code></pre>
<h2>JavaScript</h2>
<ul>
<li>Node.js (使用 axios)</li>
</ul>
<pre><code class="language-js">const axios = require(&#039;axios&#039;);
const url = &#039;https://api.example.com/data&#039;;
const auth = { username: &#039;username&#039;, password: &#039;password&#039; };
const data = { key: &#039;value&#039; };
axios.post(url, data, { auth })
.then(response =&gt; console.log(response.data))
.catch(error =&gt; console.error(error));</code></pre>
<ul>
<li>浏览器环境(Fetch API)</li>
</ul>
<pre><code class="language-js">const url = &#039;https://api.example.com/data&#039;;
const username = &#039;username&#039;;
const password = &#039;password&#039;;
const headers = new Headers({
&#039;Authorization&#039;: `Basic ${btoa(username + &#039;:&#039; + password)}`,
&#039;Content-Type&#039;: &#039;application/json&#039;
});
const data = { key: &#039;value&#039; };
fetch(url, {
method: &#039;POST&#039;,
headers: headers,
body: JSON.stringify(data)
})
.then(response =&gt; response.json())
.then(data =&gt; console.log(data));</code></pre>
<h2>Java(原生 HttpURLConnection)</h2>
<pre><code class="language-java">import java.io.*;
import java.net.*;
import java.util.Base64;
public class Main {
public static void main(String[] args) throws IOException {
String url = &quot;https://api.example.com/data&quot;;
String auth = Base64.getEncoder().encodeToString(&quot;username:password&quot;.getBytes());
String data = &quot;{\&quot;key\&quot;: \&quot;value\&quot;}&quot;;
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod(&quot;POST&quot;);
conn.setRequestProperty(&quot;Authorization&quot;, &quot;Basic &quot; + auth);
conn.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;);
conn.setDoOutput(true);
try (OutputStream os = conn.getOutputStream()) {
os.write(data.getBytes());
}
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
}</code></pre>
<ul>
<li>Go</li>
</ul>
<pre><code class="language-Go">package main
import (
&quot;bytes&quot;
&quot;encoding/base64&quot;
&quot;net/http&quot;
)
func main() {
url := &quot;https://api.example.com/data&quot;
username := &quot;username&quot;
password := &quot;password&quot;
data := []byte(`{&quot;key&quot;: &quot;value&quot;}`)
req, _ := http.NewRequest(&quot;POST&quot;, url, bytes.NewBuffer(data))
req.Header.Set(&quot;Content-Type&quot;, &quot;application/json&quot;)
req.Header.Set(&quot;Authorization&quot;, &quot;Basic &quot; +
base64.StdEncoding.EncodeToString([]byte(username + &quot;:&quot; + password)))
client := &amp;http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
}</code></pre>
<h2>PHP</h2>
<pre><code class="language-php">&lt;?php
$url = &#039;https://api.example.com/data&#039;;
$data = [&#039;key&#039; =&gt; &#039;value&#039;];
$options = [
&#039;http&#039; =&gt; [
&#039;method&#039; =&gt; &#039;POST&#039;,
&#039;header&#039; =&gt; &quot;Authorization: Basic &quot; . base64_encode(&quot;username:password&quot;) . &quot;\r\n&quot; .
&quot;Content-Type: application/json\r\n&quot;,
&#039;content&#039; =&gt; json_encode($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;
?&gt;</code></pre>
<h2>CSharp</h2>
<ul>
<li>使用 HttpClient(推荐 .NET Core+ 或 .NET 5+)</li>
</ul>
<p>``` c#
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;</p>
<p>class Program
{
static async Task Main()
{
var url = "<a href="https://api.example.com/data"">https://api.example.com/data"</a>;;
var username = "username";
var password = "password";
var data = new { key = "value" }; // 匿名对象或自定义类</p>
<pre><code> // 创建 HttpClient 并添加认证头
using var client = new HttpClient();
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($&quot;{username}:{password}&quot;));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(&quot;Basic&quot;, credentials);
// 发送 JSON 数据
var json = System.Text.Json.JsonSerializer.Serialize(data);
var content = new StringContent(json, Encoding.UTF8, &quot;application/json&quot;);
var response = await client.PostAsync(url, content);
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}</code></pre>
<p>}</p>
<pre><code>
- 使用 WebClient(旧版 .NET Framework)
``` c#
using System;
using System.Net;
using System.Text;
class Program
{
static void Main()
{
var url = &quot;https://api.example.com/data&quot;;
var username = &quot;username&quot;;
var password = &quot;password&quot;;
var data = &quot;{\&quot;key\&quot;:\&quot;value\&quot;}&quot;;
using var client = new WebClient();
// 添加认证头
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($&quot;{username}:{password}&quot;));
client.Headers[HttpRequestHeader.Authorization] = &quot;Basic &quot; + credentials;
client.Headers[HttpRequestHeader.ContentType] = &quot;application/json&quot;;
var response = client.UploadString(url, &quot;POST&quot;, data);
Console.WriteLine(response);
}
}</code></pre>