利用ChatGPT开源api开发一个聊天库

admin 综合教程评论155阅读模式

准备工作

第一步:注册OpenAI账号,如果搭建了科学还是提示不对你的国家提供服务的话,尝试清空浏览器缓存或者打开浏览器的无痕窗口。Chrome默认在右上角三个点打开就能找到“打开新的无痕式窗口”。

ChatGPT聊天库代码示例

1.网页获取所需tokenCookie

我们需要三个东西:UserAgent,CfClearance,Session_token

我们需要先打开ChatGPT官方网站:https://chat.openai.com/chat 然后按下F12打开浏览器的开发者模式

UserAgent在网络里(只需要复制UserAgent:后面的值):

CfClearance和Session_token在应用程序->cookie里面

2.创建一个session用来表示一个会话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public OpenAISession(string session_token,string cfClearance,string userAgent)
{
    Session_token = session_token;
    CfClearance = cfClearance;
    UserAgent = userAgent;
    Headers = new Dictionary<string, string>();
    Cookies = new Dictionary<string, string>();
    Proxies = new Dictionary<string, string>();
}
Session可以刷新自己的AccessToken和Session_token
public async Task RefreshSessionAsync()
{
    if (string.IsNullOrEmpty(Session_token))
    {
        throw new Exception("No tokens provided");
    }
    // Set cookies
    Cookies.Put("__Secure-next-auth.session-token", Session_token);
    Cookies.Put("cf_clearance", CfClearance);
    string cookiesString = GetCookiesString();
    Dictionary<string, string> map = new Dictionary<string, string>();
    Headers.Put("User-Agent", UserAgent);
    Headers.Put("cookie", cookiesString);
    Headers.Put("Cookie", cookiesString);
    var response = await GetAsync("https://chat.openai.com/api/auth/session");
    if (!response.IsSuccessStatusCode)
    {
        Console.WriteLine("err code: " + response.StatusCode);
        Console.WriteLine("cf_clearance: " + CfClearance);
        Console.WriteLine("token: " + Session_token);
        Console.WriteLine("userAgent: " + UserAgent);
        Console.WriteLine("请检查以上参数是否正确,是否过期。");
        throw new Exception("无法获取token!请重试");
    }
    try
    {
        string name = "__Secure-next-auth.session-token=";
        var cookies = response.Headers.GetValues("Set-Cookie");
        var stoken = cookies.FirstOrDefault(x => x.StartsWith(name));
        Session_token = stoken == null ? Session_token : stoken.Substring(name.Length, stoken.IndexOf(";"- name.Length);
        Cookies.Put("__Secure-next-auth.session-token", Session_token);
        var result = await response.Content.ReadAsStringAsync();
        AccessToken = JsonSerializer.Deserialize<Profile>(result, _jsonSerializerOptions)?.AccessToken;
        RefreshHeaders();
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error {nameof(RefreshSessionAsync)}:{ex}");
        throw new Exception($"Error {nameof(RefreshSessionAsync)}", ex);
    }
}

文章声明:
1、本站文章来源于互联网,仅供学习交流参考使用,严禁用于商业用途,因此造成的一切法律后果自行承担。
2、本站不对文章内容的完整性和安全性负责,请自行辨别,如发现有问题,请及时联系我们进行处理。
3、如果你有比较好的文章需要发布,可以联系站长屋VPS小编,或者自行点击 投稿。
4、若文章中有侵权或不适当内容,请告知我们,本站会第一时间进行处理。 免责申明。
admin
  • 我们不提供免费技术支持,本文属于用户投稿。
  • 转载请务必保留本文链接:https://www.zzwvps.com/1828.html

发表评论