【问题标题】:LinqToTwitter I can't catch tweetsLinqToTwitter 我无法捕捉推文
【发布时间】:2020-04-02 07:12:20
【问题描述】:

我正在尝试使用 GitHub 上的示例获取推文,但我收到错误“底层连接已关闭:提交时发生意外错误”。我无法理解。起初,我在 Twitter 上创建了应用程序,并将 Twitter 生成的密钥添加到应用程序中。我对 2 个属性有疑问,我不知道它们将用于什么,也不知道它们是否会导致问题:

1 - 网站 URL - 我在 Wix 上创建了一个网站来填写此字段,但我不明白它的用途,因为我只想在桌面应用程序中阅读推文。

2 - 回调 URL - 最初我没有放任何东西,然后我在帖子中看到要放 http://127.0.0.1/ 我用这些信息运行应用程序,但我还是不知道它是做什么用的,因为我要从桌面应用程序中获取推文。

这是使用的代码和收到的错误!


using System;
using System.Linq;
using System.Threading.Tasks;
using LinqToTwitter;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main()
        {        
            MainAsync().Wait();
        }
        static async Task MainAsync()
        {
            var auth = new SingleUserAuthorizer
            {

                CredentialStore = new InMemoryCredentialStore()
                {
                    ConsumerKey = "MyConsumerKey",
                    ConsumerSecret = "MyConsumerSecret",
                    OAuthToken = "MYOAuthToken",
                    OAuthTokenSecret = "MYOAuthTokenSecret"
                }
            };
            var twitterCtx = new TwitterContext(auth);

            var searchResponse = await (from search in twitterCtx.Search
                                        where search.Type == SearchType.Search 
                                        &&  search.Query == "flamengo"
                                        select search).SingleOrDefaultAsync();

            if (searchResponse != null && searchResponse.Statuses != null)
                searchResponse.Statuses.ForEach(tweet =>
                    Console.WriteLine(
                        "User: {0}, Tweet: {1}",
                        tweet.User.ScreenNameResponse,
                        tweet.Text));
        }
    }
}


System.AggregateException was unhandled
  HResult=-2146233088
  Message=Um ou mais erros.
  Source=mscorlib
  StackTrace:
       em System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
       em System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
       em System.Threading.Tasks.Task.Wait()
       em ConsoleApplication3.Program.Main() na C:\Danilo\Docs\Visual Studio 2015\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs:linha 12
       em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
       HResult=-2146233088
       Message=Ocorreu um erro ao enviar a solicitação.
       Source=mscorlib
       StackTrace:
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em LinqToTwitter.Net.GetMessageHandler.<SendAsync>d__4.MoveNext()
         --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em LinqToTwitter.TwitterExecute.<QueryTwitterAsync>d__48 1.MoveNext()
         --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em LinqToTwitter.TwitterContext.<ExecuteAsync>d__136 1.MoveNext()
         --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em LinqToTwitter.TwitterQueryProvider.<ExecuteAsync>d__8 1.MoveNext()
         --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em LinqToTwitter.TwitterExtensions.<SingleOrDefaultAsync>d__5 1.MoveNext()
         --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
            em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            em System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
            em ConsoleApplication3.Program.<MainAsync>d__1.MoveNext() na C:\Danilo\Docs\Visual Studio 2015\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs:linha 29
       InnerException: 
            HResult=-2146233079
            Message=A conexão subjacente estava fechada: Erro inesperado em um envio.
            Source=System
            StackTrace:
                 em System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
                 em System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
            InnerException: 
                 HResult=-2146232800
                 Message=Não é possível ler os dados da conexão de transporte: Foi forçado o cancelamento de uma conexão existente pelo host remoto.
                 Source=System
                 StackTrace:
                      em System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
                      em System.Net.PooledStream.EndWrite(IAsyncResult asyncResult)
                      em System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
                 InnerException: 
                      ErrorCode=10054
                      HResult=-2147467259
                      Message=Foi forçado o cancelamento de uma conexão existente pelo host remoto
                      NativeErrorCode=10054
                      Source=System
                      StackTrace:
                           em System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
                           em System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
                      InnerException:

【问题讨论】:

  • 您的代码对我有用,但我无法重现该问题。查看最里面的异常,我确实看到了错误代码 #10054 - 可能表明它与您的网络有关。您的回调 URL 与我的匹配。我的应用程序权限设置为读取、写入和 DM,但我认为这对于搜索并不重要。也许尝试向 RequestToken 端点 (developer.twitter.com/en/docs/basics/authentication/…) 发出原始的 .NET HttpClient 请求,看看是否遇到相同的错误。
  • 谢谢,我改了权限,因为我没有DM权限,现在是读,写,私信我又测试了一遍,做debug,同样的问题。如果我理解正确,在我运行 var auth = new SingleUserAuthorizer {...} 之后,我是否已经获得了 twitter 的授权来进行研究,对吗?有什么地方可以查看 auth 变量或 twitterCtx 以确保授权正常吗?错误只发生在搜索的时候,不知道是不是以前的非授权造成的。
  • 您可以使用 Fiddler 来观察流量并查看哪个调用返回了错误。我的想法是,与 Twitter 通信可能存在一些问题,看看对 Twitter API 的 any HTTP 调用是否有效可能会很有趣。如果您怀疑杀毒软件有问题,您可以通过关闭杀毒软件并再次运行代码来发现。
  • 您可以使用 Fiddler (telerik.com/fiddler),它是免费下载的,可让您查看 HTTP 流量。它可能会提供有关问题所在的更多详细信息。
  • 正确 - 授权通常是第一个障碍,这就是常见问题解答的 401 部分如此之长的原因。大多数请求来自跟踪浏览器和/或应用程序中的流量。您可以通过关闭浏览器或其他任何可能访问 Internet 的设备来最小化 Fiddler 流量。

标签: twitter linq-to-twitter


【解决方案1】:

这看起来与我们在此处解决的问题相似,问题需要设置为 TLS 1.2,因为它是较旧的 .NET 版本:

Visual Studio 2015 - Debug with HTTP connection problems

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2015-01-24
    • 2021-07-10
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多