如何将 POST 请求设置为 GitHub REST API?

How to set POST Request to GitHub REST API?

提问人:Karen Vardanyan 提问时间:11/7/2023 更新时间:11/7/2023 访问量:31

问:

我需要用GitHub REST api编写android应用程序! 所以在第一个用户需要在应用中授权时, 首先,我需要设置POST请求,并获取有关h用户的一些信息! 请帮帮我...

这是 GitHub Rest api 的文档...https://docs.github.com/en/rest?apiVersion=2022-11-28

这也是我的任务!

身份验证 ( 登录 ) 在此页面中,UI 部分必须包含 2 个输入字段(电子邮件/用户名和密码)和一个按钮(登录)。此屏幕上没有工具栏。身份验证必须使用 GitHub REST API 完成:

对于密码,请使用个人访问令牌,该令牌可以从 github 帐户中的设置生成 这是 github rest api https://developer.github.com/v3/https://docs.github.com/en/rest/overview/other-authentication-methods#via-oauth-and-personal-access-tokens 的文档)

如果用户输入了错误的凭据(密码或用户名/电子邮件),则需要显示一个 snackbar,指示凭据错误。如果用户登录成功,则需要存储登录状态,以便重新进入应用后,用户可以直接跳转到主流,跳过认证流。

提示:身份验证必须使用基本的身份验证方法实现(详见 github api 文档)。此外,您还需要使用拦截器进行 Retrofit 的基本身份验证。

我试图在文档中找到该信息,但不幸的是我不能 我还问了ChatGPT。

这里代码.

data class LoginRequest(val username: String, val password: String)

'interface GitHubService {

@POST("authorizations")    
@Headers("Accept: application/json")
    fun login(@Header("Authorization") authHeader: String,@Body loginRequest: LoginRequest):Call<YourResponseModel>

}`

private fun doRequest() {
        val retrofit = Retrofit.Builder()
            .baseUrl("https://api.github.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        val githubService = retrofit.create(GitHubService::class.java)

        val emailOrUsername = binding?.editTextText?.text.toString()
        val password = binding?.editTextTextPassword?.text.toString()
        val authHeader = "Basic " + Base64.encodeToString(
            "$emailOrUsername:$password".toByteArray(), Base64.NO_WRAP
        )

        val loginRequest = LoginRequest(emailOrUsername, password)

        githubService.login(authHeader, loginRequest).enqueue(object : Callback<YourResponseModel> {
            override fun onResponse(call: Call<YourResponseModel>, response: Response<YourResponseModel>) {
                if (response.isSuccessful) {
                    // Authentication successful
                    // Store the logged-in state here
                } else {
                    // Authentication failed, show a Snackbar
                    Snackbar.make(rootView, "Invalid credentials", Snackbar.LENGTH_SHORT).show()
                }
            }

            override fun onFailure(call: Call<YourResponseModel>, t: Throwable) {
                // Handle network or other errors
            }
        })
    }

在这种情况下,我无法获取请求模型,也无法通过Postman获得正确的响应

java android kotlin retrofit2 okhttp

评论


答: 暂无答案