# 发起请求

开始使用的最简单方法是发送一个不带自定义选项的简单查询。我们会在我们这边添加所有标准请求头，选择最快的代理，并返回响应正文给你。

```bash
curl -k -x https://unblock.oxylabs.io:60000 \
-U 'USERNAME:PASSWORD' \
'https://ip.oxylabs.io/location'
```

{% hint style="info" %}
如果你观察到成功率较低或获取到空内容，请尝试添加额外的 `"x-oxylabs-render: html"` 请求头。有关 JavaScript 渲染的更多信息可以 [**这里**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/custom-browser-instructions/javascript-rendering).
{% endhint %}

要使用 [**Web Unblocker**](https://github.com/oxylabs/web-unblocker)的其他功能，例如设置代理位置或在连续几次请求中复用同一个 IP，请随请求发送额外的请求头。

{% hint style="info" %}
为了获得最佳的网站解锁效果，Web Unblocker 会使用预定义的 Cookie、请求头和会话。请 **不要发送任何常用于解锁的自定义参数**，因为它们可能会影响 Web Unblocker 获取高质量数据的能力。
{% endhint %}

以下是支持的全部功能和请求头列表：

### 附加功能

| 参数                                  | 描述                                                                                                                                                                                   | 阅读更多链接                                                                                                                                                           |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `X-Oxylabs-Session-Id`              | 如果你想在多个请求中复用同一个 IP，请添加一个会话 ID，它可以是一串随机字符。                                                                                                                                            | [**会话**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/session)                                     |
| `X-Oxylabs-Geo-Location`            | 要使用来自特定位置的 IP 地址，请指定国家或城市，例如德国。你可以在以下位置找到支持的地理位置值 [**这里**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/geo-location). | [**地理位置**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/geo-location)                              |
| 请求头                                 | 如果你想发送自定义请求头，请在提交请求时使用 `x-oxylabs-force-headers: 1` 请求头。                                                                                                                             | [**请求头**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/headers)                                    |
| Cookie                              | 你可以将自己的 Cookie 添加到请求中，例如 `Cookie: NID=1234567890`。                                                                                                                                   | [**Cookie**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/headers)                                 |
| `X-Oxylabs-Successful-Status-Codes` | 如果你的目标网站返回了一个非标准状态码但响应成功，你可以发送该响应状态码，我们的系统将不会重试该请求。                                                                                                                                  | [**自定义状态码**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/making-requests/custom-status-code)                      |
| `X-Oxylabs-Render`                  | 如果你想渲染 JavaScript，请使用 `html` 获取渲染后的 HTML，或使用 `png` 获取页面截图。                                                                                                                           | [**JavaScript 渲染**](https://developers.oxylabs.io/documentation/cn/gao-ji-dai-li-jie-jue-fang-an/web-unblocker/custom-browser-instructions/javascript-rendering) |

{% hint style="info" %}
如需更高级的代码示例，请参考上表中链接到的各功能页面。
{% endhint %}

#### 代码示例

{% tabs %}
{% tab title="cURL" %}

```shell
curl -k -x https://unblock.oxylabs.io:60000 \
-U 'USERNAME:PASSWORD' \
'https://ip.oxylabs.io/headers'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

# 在此使用你的 Web Unblocker 凭据。
USERNAME, PASSWORD = 'YOUR_USERNAME', 'YOUR_PASSWORD'

# 定义代理字典。
proxies = {
  'http': f'http://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
  'https': f'https://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
}

response = requests.request(
    'GET',
    'https://ip.oxylabs.io/headers',
    verify=False,  # 忽略 SSL 证书
    proxies=proxies,
)

# 将结果页面打印到 stdout
print(response.text)

# 将返回的 HTML 保存到 result.html 文件
with open('result.html', 'w') as f:
    f.write(response.text)
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';

const username = 'YOUR_USERNAME';
const password = 'YOUR_PASSWORD';

const agent = new HttpsProxyAgent(
  `https://${username}:${password}@unblock.oxylabs.io:60000`
);

// 忽略证书
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;

const response = await fetch('https://ip.oxylabs.io/headers', {
  method: 'get',
  agent: agent,
});

console.log(await response.text());
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://ip.oxylabs.io/headers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, 'https://unblock.oxylabs.io:60000');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'YOUR_USERNAME' . ':' . 'YOUR_PASSWORD');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"crypto/tls"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
)

func main() {
	const Username = "YOUR_USERNAME"
	const Password = "YOUR_PASSWORD"

	proxyUrl, _ := url.Parse(
		fmt.Sprintf(
			"https://%s:%s@unblock.oxylabs.io:60000",
			Username,
			Password,
		),
	)
	customTransport := &http.Transport{Proxy: http.ProxyURL(proxyUrl)}

	// 忽略证书
	customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}

	client := &http.Client{Transport: customTransport}
	request, _ := http.NewRequest("GET",
		"https://ip.oxylabs.io/headers",
		nil,
	)

	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var webProxy = new WebProxy
            {
                Address = new Uri("https://unblock.oxylabs.io:60000"),
                BypassProxyOnLocal = false,
                UseDefaultCredentials = false,

                Credentials = new NetworkCredential(
                userName: "YOUR_USERNAME",
                password: "YOUR_PASSWORD"
                )
            };

            var httpClientHandler = new HttpClientHandler
            {
                Proxy = webProxy,
            };

            // 忽略证书
            httpClientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
            httpClientHandler.ServerCertificateCustomValidationCallback =
                (httpRequestMessage, cert, cetChain, policyErrors) =>
                {
                    return true;
                };


            var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

            Uri baseUri = new Uri("https://ip.oxylabs.io/headers");
            client.BaseAddress = baseUri;

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, "");

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Java" %}

```java
package org.example;

import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
import org.apache.hc.client5.http.ssl.TrustAllStrategy;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.StatusLine;
import org.apache.hc.core5.ssl.SSLContextBuilder;

import java.util.Arrays;
import java.util.Properties;


public class Main {

    public static void main(final String[] args)throws Exception {
        final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
                .add(new AuthScope("unblock.oxylabs.io", 60000), "USERNAME", "PASSWORD".toCharArray())
                .build();
        final HttpHost target = new HttpHost("https", "ip.oxylabs.io", 443);
        final HttpHost proxy = new HttpHost("https", "unblock.oxylabs.io", 60000);
        try (final CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .setProxy(proxy)
                // 我们建议接受我们的证书，而不是允许不安全的（http）流量
                .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create()
                        .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
                                .setSslContext(SSLContextBuilder.create()
                                        .loadTrustMaterial(TrustAllStrategy.INSTANCE)
                                        .build())
                                .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                                .build())
                        .build())
                .build()) {

            final RequestConfig config = RequestConfig.custom()
                    .build();
            final HttpGet request = new HttpGet("/headers");
            request.setConfig(config);

            System.out.println("Executing request " + request.getMethod() + " " + request.getUri() +
                    " via " + proxy + " headers: " + Arrays.toString(request.getHeaders()));

            httpclient.execute(target, request, response -> {
                System.out.println("----------------------------------------");
                System.out.println(request + "->" + new StatusLine(response));
                EntityUtils.consume(response.getEntity());
                return null;
            });
        }
    }
}
```

{% endtab %}
{% endtabs %}
