나는 마이크로 소프트 BotFramework
봇 코드를 다운로드하려고 할 때 내가 직면하고 문제가얻기 403 (금지), 마이크로 소프트 봇은 웹 클라이언트 만들려고 - 다운로드 데이터 통화
를 사용하여 로봇을 만들려고 오전 Facebook 메신저/Skype/Slack과 같은 채널을 통해 데이터 (사용자가 봇에 업로드 한 이미지). 다운로드 할 코드는 WebClient를 만들고 첨부 파일 URL을 전달하여 DownloadData 호출을 만드는 것입니다.
업로드 된 이미지 URL을 탐색 할 수 있습니다. 또한 웹 클라이언트를 통해 데이터를 다운로드하는 코드는 Bot 응용 프로그램보다는 콘솔 응용 프로그램을 작성하면 잘 작동합니다.
C# 코드는 친절이 문제에 대한 해결책이 될해야하는지 제안 WebClient wc = new WebClient();
byte[] bytes = wc.DownloadData(imageUrl); // This line gives 403 error
스 니펫.
WebClient wc = new WebClient();
byte[] bytes = wc.DownloadData(imageUrl); // This line gives 403 error
private async Task<IEnumerable<byte[]>> GetAttachmentsAsByteArrayAsync(Activity activity)
{
var attachments = activity?.Attachments?
.Where(attachment => attachment.ContentUrl != null)
.Select(c => Tuple.Create(c.ContentType, c.ContentUrl));
if (attachments != null && attachments.Any())
{
var contentBytes = new List<byte[]>();
using (var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)))
{
var token = await (connectorClient.Credentials as MicrosoftAppCredentials).GetTokenAsync();
foreach (var content in attachments)
{
var uri = new Uri(content.Item2);
using (var httpClient = new HttpClient())
{
if (uri.Host.EndsWith("skype.com") && uri.Scheme == "https")
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
}
else
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(content.Item1));
}
contentBytes.Add(await httpClient.GetByteArrayAsync(uri));
}
}
}
return contentBytes;
}
return null;
}
데이터 다운로드가 정상적으로 작동하지만 이미지가 메신저를 통해 업로드되면 [동일한] 동일한 이미지를 다운로드하는 경우 HTTP 403 오류가 발생합니다 .- 같은 파일을 어떻게 동시에 업로드하고 다운로드 할 수 있습니까? – stuartd
사용자는 첨부 파일 (이미지)을 봇 채널에 업로드 한 다음 동일한 이미지에서 처리하기 위해 봇 코드가 업로드 된 URL에서 데이터를 다운로드하려고합니다. Http 403은 봇이 데이터를 다운로드하려고 할 때 나타납니다. –
Skype의 경우 DefaultRequestHeaders.Authorization을 ("Bearer", token), DefaultRequestHeaders.Accept를 "application/octet-stream"으로 추가해야합니다. 다른 채널의 경우 DefaultRequestHeaders.Accept를 컨텐츠 유형 –