Как настроить заголовок HTTP_USER_AGENT с помощью графена и React Native? - PullRequest
0 голосов
/ 25 июня 2019

Я обнаружил, что React Native не передает значение HTTP_USER_AGENT Джанго Графену. На Garaphene я получаю заголовок по:

def resolve(cls, root, info, **kwargs):
    info.context.META['HTTP_USER_AGENT']

Работает, когда я отправляю запрос через браузер. Однако HTTP_USER_AGENT имеет значение «okhttp / 3.6.0» только при отправке запроса через приложение React Native. Поэтому я попытался изменить значение HTTP_USER_AGENT, установив заголовки axios.

onSubmit = async () => {
        if (!this.state.isSubmitting) {
            this.setState({isSubmitting: true});
            await axios({
                url: 'http://192.168.0.6:8000/graphql/',
                method: 'post',
                headers: {
                    HTTP_USER_AGENT: 'CCC'
                },
                data: {
                    query: `

Это не работает. HTTP_USER_AGENT не изменяется и показывает только «okhttp / 3.6.0». Я попробовал другие пользовательские заголовки и обнаружил, что они тоже не работают. Я не могу просто установить свой собственный заголовок. Почему это так? Единственный заголовок, который я был доступен для изменения, был АВТОРИЗАЦИЯ. Джанго Графен получил значение заголовка, когда я установил

await axios({
                    url: 'http://192.168.0.6:8000/graphql/',
                    method: 'post',
                    headers: {
                        AUTHORIZATION: 'JWT CCC'
                    },

и значение было доступно с

info.context.META['HTTP_AUTHORIZATION']

Я понятия не имел, были ли мои предположения неверными.

1 Ответ

0 голосов
/ 25 июня 2019

Решил это к счастью.

Вы должны установить заголовок «АГЕНТ-ПОЛЬЗОВАТЕЛЬ» на стороне клиента (React Native)

await axios({
                url: 'http://192.168.0.6:8000/graphql/',
                method: 'post',
                timeout: 5000,
                headers: {
                    'USER-AGENT': await Constants.getWebViewUserAgentAsync(),
                },

И получите значение HTTP_USER_AGENT на стороне вашего сервера (Джанго Графен)

ua_string = info.context.META['HTTP_USER_AGENT']
        user_agent = parse(ua_string)

Я не знаю, почему их имена разные (у меня ушло полдня), но так оно и есть.

...