Setting the User-Agent header (#759)

This commit is contained in:
Mikael Mengistu 2017-08-27 16:35:28 -07:00 committed by GitHub
parent ccc97c67ab
commit b60e598277
7 changed files with 30 additions and 11 deletions

View File

@ -1,4 +1,5 @@
import { HttpError } from "./HttpError"
import { UserAgent } from "./UserAgent"
export interface IHttpClient {
get(url: string, headers?: Map<string, string>): Promise<string>;
@ -25,7 +26,7 @@ export class HttpClient implements IHttpClient {
xhr.open(method, url, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("User-Agent", UserAgent);
if (headers) {
headers.forEach((value, header) => xhr.setRequestHeader(header, value));
}

View File

@ -2,6 +2,7 @@ import { DataReceived, TransportClosed } from "./Common"
import { IHttpClient } from "./HttpClient"
import { HttpError } from "./HttpError"
import { ILogger, LogLevel } from "./ILogger"
import { UserAgent } from "./UserAgent"
export enum TransportType {
WebSockets,
@ -195,6 +196,7 @@ export class LongPollingTransport implements ITransport {
}
let pollXhr = new XMLHttpRequest();
pollXhr.setRequestHeader("User-Agent", UserAgent);
if (transferMode === TransferMode.Binary) {
pollXhr.responseType = "arraybuffer";
}

View File

@ -0,0 +1 @@
export const UserAgent = "Microsoft.AspNetCore.Sockets.Client.Http-js/1.0.0-alpha";

View File

@ -0,0 +1,13 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Net.Http.Headers;
namespace Microsoft.AspNetCore.Sockets.Client.Http
{
public class Constants
{
private static readonly string UserAgent = "Microsoft.AspNetCore.Sockets.Client.Http/1.0.0-alpha";
public static readonly ProductInfoHeaderValue UserAgentHeader = ProductInfoHeaderValue.Parse(UserAgent);
}
}

View File

@ -9,8 +9,9 @@ using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks.Channels;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Sockets.Features;
using Microsoft.AspNetCore.Sockets.Client.Http;
using Microsoft.AspNetCore.Sockets.Client.Internal;
using Microsoft.AspNetCore.Sockets.Features;
using Microsoft.AspNetCore.Sockets.Http.Internal;
using Microsoft.AspNetCore.Sockets.Internal;
using Microsoft.Extensions.Logging;
@ -200,10 +201,13 @@ namespace Microsoft.AspNetCore.Sockets.Client
// Get a connection ID from the server
logger.EstablishingConnection(url);
using (var request = new HttpRequestMessage(HttpMethod.Options, url))
using (var response = await httpClient.SendAsync(request))
{
response.EnsureSuccessStatusCode();
return await ParseNegotiateResponse(response, logger);
request.Headers.UserAgent.Add(Constants.UserAgentHeader);
using (var response = await httpClient.SendAsync(request))
{
response.EnsureSuccessStatusCode();
return await ParseNegotiateResponse(response, logger);
}
}
}
catch (Exception ex)

View File

@ -7,6 +7,7 @@ using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks.Channels;
using Microsoft.AspNetCore.Sockets.Client.Http;
using Microsoft.AspNetCore.Sockets.Client.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
@ -89,7 +90,7 @@ namespace Microsoft.AspNetCore.Sockets.Client
while (!cancellationToken.IsCancellationRequested)
{
var request = new HttpRequestMessage(HttpMethod.Get, pollUrl);
request.Headers.UserAgent.Add(SendUtils.DefaultUserAgentHeader);
request.Headers.UserAgent.Add(Constants.UserAgentHeader);
var response = await _httpClient.SendAsync(request, cancellationToken);
response.EnsureSuccessStatusCode();

View File

@ -5,10 +5,10 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks.Channels;
using Microsoft.AspNetCore.Sockets.Client.Http;
using Microsoft.AspNetCore.Sockets.Client.Internal;
using Microsoft.Extensions.Logging;
@ -16,9 +16,6 @@ namespace Microsoft.AspNetCore.Sockets.Client
{
internal static class SendUtils
{
private static readonly string DefaultUserAgent = "Microsoft.AspNetCore.SignalR.Client/0.0.0";
public static readonly ProductInfoHeaderValue DefaultUserAgentHeader = ProductInfoHeaderValue.Parse(DefaultUserAgent);
public static async Task SendMessages(Uri sendUrl, Channel<byte[], SendMessage> application, HttpClient httpClient,
CancellationTokenSource transportCts, ILogger logger, string connectionId)
{
@ -41,7 +38,7 @@ namespace Microsoft.AspNetCore.Sockets.Client
// Send them in a single post
var request = new HttpRequestMessage(HttpMethod.Post, sendUrl);
request.Headers.UserAgent.Add(DefaultUserAgentHeader);
request.Headers.UserAgent.Add(Constants.UserAgentHeader);
// TODO: We can probably use a pipeline here or some kind of pooled memory.
// But where do we get the pool from? ArrayBufferPool.Instance?